en angulaire et dactylography, j'ai une interface maintenant deux autres interfaces, qui hérité de celle-ci: p> maintenant comment faire J'y vais à ce sujet, lors de l'utilisation d'une entrée dans un composant angulaire: p> donc avec cela, je me soucie si je reçois un objet B ou C, Il doit être de type A. Mais cela conduira à des erreurs une fois que j'appelle p> à cause de l'année de chaque année n'existe pas sur des objets de type A uniquement sur le type B. P> Je vois que je peux faire: p> mais cela semble faux et ne fonctionne pas. N'y a-t-il pas une manière plus générique d'utiliser l'héritage? P> p>
4 Réponses :
Les types de syndicats sont le meilleur moyen de le faire, si vous vous attendez à héritage ici vous aide à hériter toutes les propriétés de en utilisant Lire p> p> obj code> pour être juste de types
b code> ou
c code>. Utilisation de
A code> signifie que l'objet pourrait être de type
a code> ou tout sous-type fort> (dont il y a une infinité, pas seulement
B code> ou
c code>)
a code> dans
b code> et
c code >, c'est là que l'utilité se termine. p>
B | C code> vous permet également d'utiliser des gardes de type pour accéder aux propriétés qui ne sont pas communes aux deux
B code> et
c code> (Vous ne pouvez pas accéder à des champs spécifiques par défaut, sauf si Vous effectuez une sorte de chèque pour voir ce qui est réellement dans
obj code> au moment de l'exécution): p>
@ user5417542 J'ai ajouté un exemple de terrain de jeu complet, laissez-moi savoir ce qui ne fonctionne pas pour vous
Vous devrez peut-être utiliser this.OBJ ['année'] code> pour éviter l'erreur de compilation.
@Connorsfan non sous noimeplictany code>, et je ne le recommande pas vraiment. Vous venez de contourner le système de type, de ne pas l'utiliser, car quelque chose qui est un cas d'utilisation commun avec un motif de TS commun.
Si vous souhaitez que l'entrée soit utilisée soit B OR, vous pouvez également ajouter un argument générique à la classe. Vous pouvez utiliser le parent A pour ajouter une restriction sur la classe p>
Vous pouvez garder votre entrée de même type que possible, mais lorsque vous l'utilisez, vous pouvez utiliser la coulée de type. Vous pouvez faire quelque chose comme ceci: Il ne se plaingera plus. p> p>
Si vous utilisez une interface d avec les deux propriétés, définissez-les uniquement en option.
export interface A { name: string; } export interface D extends A { year?: number; place?: string; }
" Donc, avec cela, je dis que je m'en fiche si j'obtiens l'objet B ou C, il doit être de type A i>" alors pourquoi appelez-vous
obj.year code> Si cela ne sera disponible que sur B? Cela suggère que vous attendez un type B.
Si vous voulez faire des trucs de manière conditionnelle sur
B code> Type d'objets dans une fonction qui prend
a | b code>, check Out TypeGuards.
@Vlaz Eh bien, j'ai déjà vérifié, alors cela ne fait que être exécuté, quand c'est B. Je ne me sépare pas de les séparer dans deux composants différents.