web-dev-qa-db-fra.com

Vérification du type de classe

Dans ActionScript, il est possible de vérifier le type au moment de l'exécution à l'aide de l'opérateur is operator :

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 (extension ou) est une classe ou une interface donnée avec TypeScript?

Je n'ai rien trouvé à ce sujet dans les spécifications linguistiques. Il devrait être présent lorsque vous travaillez avec des classes/interfaces.

195
Mark Knol

4.19.4 L'opérateur instanceof

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

Afin que vous puissiez utiliser

mySprite instanceof Sprite;

Notez que cet opérateur est également en ActionScript mais qu'il ne devrait plus être utilisé ici:

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

instanceof de TypeScript partage les mêmes problèmes. Comme il s’agit d’un langage en cours de développement, je vous recommande d’énoncer une proposition de ce type.

Voir également:

258
Zeta

TypeScript permet de valider le type d'une variable au moment de l'exécution. Vous pouvez ajouter une fonction de validation qui retourne un prédicat de type . Vous pouvez donc appeler cette fonction dans une instruction if et vous assurer que tout le code à l'intérieur de ce bloc est sûr à utiliser comme type que vous pensez être.

Exemple tiré de la documentation 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 sur: https://www.typescriptlang.org/docs/handbook/advanced-types.html

39
Gilad S