à l'aide d'une interface de type d'un objet anonyme en caractères d'imprimerie
J'ai une Interface IBase et une variable qui contient quelques autres objets (dans l'exemple j'ai juste ajouté de la base pour une meilleure démonstration)
interface IBase {
height?:number;
width?:number;
}
var element = {
base: {
}
}
Comment puis-je dire que l'objet qui la varable élément.la base a est du type IBase? Je sais que je peux créer un type de l'élément variable qui contient les types de base, etc, mais est-ce aussi une possibilité de type de scénario sans le faire.
OriginalL'auteur Safari | 2014-06-17
Vous devez vous connecter pour publier un commentaire.
Van den Brink réponse est bonne. Tout comme une démo d'une autre option :
Cela donnera à l'souhaité intellisense :
À l'aide d'une assertion de type ici seulement vous obtient une partie des avantages, car il va vous permettre de vous contraindre à un type que votre littéral d'objet n'est pas réellement conformes aux spécifications pour. C'est, il vous permet de vous intellisense, mais ne pas obtenir de vous une bonne statique de la vérification de type. AFAICT la seule façon d'obtenir une vérification des types statiques pour affecter les littérale à une variable de type approprié sans une assertion de type. Dick van den Brink a la meilleure réponse de l'OMI.
OriginalL'auteur basarat
Si vous modifiez la déclaration de l'élément var à la suite on sait ce que la base est:
Remarque: vous pouvez également créer une nouvelle interface, comme ce qui rend un peu plus réutilisable:
interface IElement {
base: IBase;
}
et puis l'utiliser comme ici:
var element: IElement = { base: {} }
OriginalL'auteur Dick van den Brink
Vous avez accidentellement causé-vous un problème avec votre déclaration d'interface. C'est un subtil celui que vous allez venir à travers avec structurellement tapé langues.
Parce que toutes les propriétés sont en option, l'interface est essentiellement
{}
. c'est à dire un objet de satisfaire à cette interface. C'est trop général pour être utile dans la plupart des cas.Par exemple, il est parfaitement acceptable pour ce faire:
Je pense que vous serez d'accord que vraiment cet objet n'est pas utile partout où j'ai voulu utiliser un
IBase
objet.Avec cela, vous pouvez trouver le plus gracieux de la solution est de créer une interface qui correspond à votre
element
définition.OriginalL'auteur Fenton
L'excellente réponse de @basarat a maintenant besoin d'un peu de mise à jour; à l'aide de crochets produit maintenant un
tslint
erreur:La solution est simple:
Il offre aussi l'intellisense (auto-complétion) que vous voulez.
OriginalL'auteur Paul F. Wood