Controllo del tipo di class con TypeScript

Sono molto entusiasta di TypeScript , quindi ho iniziato a giocarci. Come sviluppatore di Actionscript, rende Javascript meno difficile.

Tuttavia, in Actionscript è ansible controllare il tipo in fase di esecuzione utilizzando l’ operatore is :

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

È ansible rilevare se una variabile (extends o) è una determinata class o interfaccia con TypeScript? Non ho trovato nulla a riguardo nelle specifiche del linguaggio, dovrebbe essere presente quando si lavora con classi / interfacce.


Aggiornamento: alcuni anni dopo. Ho fatto cadere TypeScript molto velocemente e ho iniziato a usare Haxe, che è stato compilato con JavaScript eccellente e ha un vero controllo dei tipi che funziona su classi, interfacce, ecc. Ha anche la rimozione dei codici morti, le enumerazioni migliori, i tipi astratti e le funzioni di compilazione del tempo (macros), compila anche in un file quindi non è necessario un sistema complesso di creazione di bundle.

4.19.4 L’operatore instanceof

L’operatore instanceof richiede che l’operando di sinistra sia di tipo Any, un tipo di object o un tipo di parametro type e l’operando right sia di tipo Any o un sottotipo del tipo di interfaccia ‘Function’. Il risultato è sempre del tipo primitivo booleano.

Quindi potresti usare

 mySprite instanceof Sprite; 

Nota che questo operatore è anche in ActionScript ma non dovrebbe essere più utilizzato lì:

L’operatore is, che è nuovo per ActionScript 3.0, consente di verificare se una variabile o espressione è un membro di un determinato tipo di dati. Nelle versioni precedenti di ActionScript, l’operatore instanceof ha fornito questa funzionalità, ma in ActionScript 3.0 l’operatore instanceof non deve essere utilizzato per verificare l’appartenenza al tipo di dati. L’operatore is deve essere usato al posto dell’operatore instanceof per il controllo manuale del tipo, poiché l’espressione x instanceof y controlla semplicemente la catena del prototipo di x per l’esistenza di y (e in ActionScript 3.0, la catena del prototipo non fornisce un’immagine completa di la gerarchia ereditaria).

L’ instanceof di TypeScript condivide gli stessi problemi. Poiché si tratta di una lingua ancora in fase di sviluppo, ti consiglio di presentare una proposta di tale struttura.

Guarda anche:

  • MDN: instanceof

TypeScript ha un modo di convalidare il tipo di una variabile in runtime. È ansible aggiungere una funzione di convalida che restituisce un predicato di tipo . Quindi puoi chiamare questa funzione all’interno di un’istruzione if e assicurarti che tutto il codice all’interno di quel blocco sia sicuro da usare come il tipo che pensi sia.

Esempio dai documenti TypeScript:

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

Vedi di più su: https://www.typescriptlang.org/docs/handbook/advanced-types.html