Je crée un objet avec une classe dynamique par param. Existe-t-il un moyen de spécifier également le type d'objet à avoir l'intellisense?
Ceci est le code: P>
Main: P>
export class ITA {
id: string;
name: string;
pck: string;
constructor() {
console.log('ITA class');
this.id = '1';
this.name = 'ita';
this.pck = '4';
}
}
export class DEU {
id: string;
name: string;
size: string;
constructor() {
console.log('DEU class');
this.id = '1';
this.name = 'ita';
this.size = '5';
}
}
export const Store: any = {
ITA,
DEU,
}
3 Réponses :
Vous pouvez le jeter:
let ita: ITA = new DynamicClass('ITA') as ITA;
let deu: DEU = new DynamicClass('DEU') as DEU;
Ouais mec je le sais, mais je ne veux pas le faire. Je souhaite spécifier le type de manière dynamique et non codé dur.
Ce n'est pas possible. Comment cela fonctionnerait-il même? Votre IDE devrait prédire l'avenir pour déterminer le type de variable.
Vous pouvez créer une fonction d'usine qui acceptera uniquement les noms de classe connus et son type de retour sera résolu en fonction de la clé fournie (nom de classe): Terrain de jeu p> p>
Peut-on faire sans coulée dans la fonction d'usine? Sinon, pourquoi?
Parce que clé code> est l'union de tous les noms de classe possibles, donc sans type affirmation, le type de retour résolu sera l'union de tous les types d'instance possibles
Je suggérerais ce qui suit: mais je ne vois aucun avantage sur: p> type Langs = 'ITA' | 'DEU'
function doSth(lang: Langs): string {
switch (lang) {
case 'ITA':
const ita = new ITA();
return ita.name;
case 'DEU':
const deu = new DEU();
return deu.name + deu.size;
}
}
Utilisation du commutateur ou si est la méthode "standard". À l'avenir, lorsque je vais ajouter d'autres pays, je dois modifier beaucoup de code. Je cherche un moyen dinamiquement de créer un objet, même si je n'ai que pour créer l'interface pour le nouveau pays.
Si c'est votre préoccupation, vous devriez alors programmer une interface commune de ces classes.
Pourriez-vous expliquer quel est le cas d'utilisation et pourquoi avez-vous besoin d'un tel wrapper?
J'ai un code de localisation comme entrée dans un composant et j'aimerais créer de manière dynamique un objet basé sur ce code de localisation.
Est-ce que les objets que vous avez l'intention de créer doivent avoir différents types (différents champs, méthodes, etc.) ou peuvent être de même type?
@Lesiak ils devraient être différents. Différents champs, méthodes, etc. ...