Question Vérification du type de classe avec TypeScript


Je suis très excité à propos de Manuscritalors j'ai commencé à jouer avec. En tant que développeur Actionscript, cela rend Javascript moins difficile.

Cependant, dans Actionscript, il est possible de vérifier le type lors de l’exécution à l’aide du est 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 (extend ou) est une certaine classe ou interface avec TypeScript? Je ne pouvais rien trouver à ce sujet dans les spécifications de langage, il devrait être là quand on travaille avec des classes / interfaces.


Mettre à jour: Quelques années plus tard. J'ai laissé tomber TypeScript très rapidement et commencer à utiliser Haxe qui compile en un excellent JavaScript et a un vrai contrôle de type qui fonctionne sur les classes, les interfaces, etc. Il a aussi la suppression de code mort, de meilleurs énumérations, des types abstraits et des fonctions de compilation (macros). est nécessaire.


115
2017-10-08 20:47


origine


Réponses:


4.19.4 L'opérateur instanceof

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

Donc, vous pouvez utiliser

mySprite instanceof Sprite;

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

L'opérateur is, 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, il ne fallait pas utiliser l'opérateur instanceof 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 des types, car l'expression x instanceof y vérifie simplement l'existence de y dans la chaîne prototype x (et dans ActionScript 3.0, la chaîne prototype ne fournit pas une image complète de la hiérarchie d'héritage).

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

Voir également:


158
2017-10-08 20:54



TypeScript permet de valider le type d'une variable à 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 instruction if et vous assurer que tout le code à l'intérieur de ce bloc peut être utilisé comme le type que vous pensez.

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


13
2017-11-21 10:42