Type de classe avec contrôle tapuscrit

voix
107

Je suis très heureux de tapuscrit , alors j'ai commencé à jouer avec elle. En tant que développeur actionscript, il est moins dur Javascript.

Cependant, en Actionscript il est possible de vérifier le type à l' exécution en utilisant l' 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 (ou étend) est une certaine classe ou de l'interface avec tapuscrit? Je ne pouvais pas trouver quoi que ce soit à ce sujet dans les spécifications linguistiques, il devrait être là lorsque vous travaillez avec des classes / interfaces.


Mise à jour: Quelques années plus tard. Je lâchai tapuscrit très rapide et commencer à utiliser Haxe qui compile à un excellent JavaScript et a réel contrôle de type qui fonctionne sur les classes, interfaces , etc. a également le retrait mort code, mieux énumérations, types abstraits et la compilation des fonctions temps (macros), compile également dans un fichier si aucun système complexe de construction de faisceau est nécessaire.

Créé 08/10/2012 à 21:47
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
142

4.19.4 L'opérateur instanceof

L' instanceofopérateur nécessite l'opérande de gauche à être de type Tout, un type d'objet, ou un type de paramètre de type, et le droit opérande être de type Tout ou un sous - type du type d'interface « Fonction ». Le résultat est toujours du type primitif booléenne.

Donc, vous pouvez utiliser

mySprite instanceof Sprite;

Notez que cet opérateur est également en ActionScript, mais il ne doit pas être utilisé plus là:

L'opérateur est, ce 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. Dans les versions précédentes d'ActionScript, l'opérateur instanceof a fourni cette fonctionnalité, mais dans ActionScript 3.0, l'opérateur instanceof ne doit pas être utilisé pour tester l'adhésion de type de données. L'est opérateur doit être utilisé à la place de l'opérateur instanceof pour la vérification de type manuel, car l'expression x instanceof 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 d'héritage).

De tapuscrit instanceofactions les mêmes problèmes. Comme il est une langue qui est encore dans son développement , je vous recommande d'énoncer une proposition d' une telle installation.

Voir également:

Créé 08/10/2012 à 21:54
source utilisateur

voix
8

Tapuscrit ont une façon de valider le type d'une variable dans l' exécution. Vous pouvez ajouter une fonction validation qui renvoie un attribut de type . Ainsi , vous pouvez appeler cette fonction dans une instruction if, et assurez - vous que tout le code dans ce bloc est sûr à utiliser comme le type que vous pensez qu'il est.

Exemple de tapuscrit docs:

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

Créé 21/11/2016 à 10:42
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more