Vérification de type de classe avec TypeScript

Je suis très enthousiaste à propos de TypeScript , alors j'ai commencé à jouer avec lui. En tant que développeur ActionScript, cela rend JavaScript moins difficile.

Toutefois, dans Actionscript, il est possible de vérifier le type en cours d'exécution à l'aide de l' opérateur :

var mySprite:Sprite = new Sprite(); trace(mySprite is Sprite); // true trace(mySprite is DisplayObject);// true trace(mySprite is IEventDispatcher); // true 

Est-il possible de détecter si une variable (extends ou) est une certaine classe ou interface avec TypeScript? Je n'ai rien trouvé à ce sujet dans les spécifications linguistiques, il devrait être là quand il travaille avec des classes / interfaces.


Mise à jour: quelques années plus tard. J'ai abandonné TypeScript très rapidement et j'ai commencé à utiliser Haxe qui compile un excellent JavaScript et possède une véritable vérification de type qui fonctionne sur les classes, les interfaces, etc. Le retrait du code mort, les énormes énumérations, les types abstraits et les fonctions de temps de compilation (macros) compilent également À un seul fichier, il n'est donc pas nécessaire de créer un système de compilation complexe.

4.19.4 L'instance de l'opérateur

L' instanceof opérateur exige que l'opérande gauche soit du type Any, un type d'objet ou un type de type de type, et l'opérande droit soit du type Any ou un sous-type du type d'interface 'Function'. Le résultat est toujours du type primitif booléen.

Donc, vous pourriez utiliser

 mySprite instanceof Sprite; 

Notez que cet opérateur est également dans ActionScript, mais il ne devrait plus être utilisé ici:

L'opérateur, qui est nouveau pour ActionScript 3.0, vous permet de tester si une variable ou une expression est un membre d'un type de donnée donné. Dans les versions précédentes d'ActionScript, l'instance de l'opérateur a fourni cette fonctionnalité, mais dans ActionScript 3.0, l'opérateur instanceof ne doit pas être utilisé pour tester l'appartenance au type de données. L'opérateur doit être utilisé à la place de l'opérateur instanceof pour la vérification manuelle du type, car l'expression x instance de y vérifie simplement la chaîne prototype de x pour l'existence de y (et dans ActionScript 3.0, la chaîne prototype ne fournit pas une image complète de La hiérarchie des héritages).

L' instanceof de TypeScript partage les mêmes problèmes. Comme c'est une langue qui est encore dans son développement, je vous recommande de présenter une proposition de cette facilité.

Voir également:

  • MDN: instanceof

TypeScript a un moyen de valider le type de variable dans l'exécution. Vous pouvez ajouter une fonction de validation qui renvoie un prédicat de type . Vous pouvez donc appeler cette fonction dans une déclaration if, et assurez-vous que tout le code à l'intérieur de ce bloc est sûr d'utiliser comme type que vous pensez.

Exemple à partir des documents TypeScript:

 function isFish(pet: Fish | Bird): pet is Fish { return (<Fish>pet).swim !== undefined; } // Both calls to 'swim' and 'fly' are now okay. if (isFish(pet)) { pet.swim(); } else { pet.fly(); } 

Voir plus à l' adresse suivante : https://www.typescriptlang.org/docs/handbook/advanced-types.html