controllo di tipo Class con dattiloscritto

voti
107

Sono molto entusiasta di dattiloscritto , così ho iniziato a giocare con lui. In qualità di sviluppatore di Actionscript, rende Javascript meno duro.

Tuttavia, in Actionscript è possibile 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

E 'possibile rilevare se una variabile (estende o) è una certa classe o interfaccia con dattiloscritto? Non ho trovato nulla su di esso nelle specifiche della lingua, che dovrebbe essere lì quando si lavora con classi / interfacce.


Update: Pochi anni dopo. Ho lasciato cadere dattiloscritto molto veloce e iniziare a usare Haxe che compila ad eccellente JavaScript e ha tipo reale controllo che funziona sulle classi, interfacce ecc ha anche la rimozione dead-code, enumerazioni migliori, tipi astratti e compilare tempo funzioni (macro), compila anche a un file è così necessario alcun sistema di fascio di costruzione complessa.

È pubblicato 08/10/2012 alle 21:47
fonte dall'utente
In altre lingue...                            


2 risposte

voti
142

4.19.4 L'operatore instanceof

L' instanceofoperatore richiede l'operando sinistro essere di tipo qualsiasi, un tipo di oggetto, o un tipo tipo di parametro, e l'operando di destra essere di tipo qualsiasi o un sottotipo del tipo di interfaccia 'Function'. Il risultato è sempre del tipo primitivo booleano.

Così si potrebbe usare

mySprite instanceof Sprite;

Si noti che questo operatore è anche in ActionScript ma non dovrebbe essere usato più lì:

L'operatore è, che è nuova per ActionScript 3.0, consente di verificare se una variabile o un'espressione è un membro di un determinato tipo di dati. Nelle versioni precedenti di ActionScript, l'operatore instanceof fornito questa funzionalità, ma in ActionScript 3.0 l'operatore instanceof non deve essere utilizzato per verificare l'adesione tipo di dati. L'operatore is dovrebbe essere usato al posto del operatore instanceof per il controllo di tipo manuale, perché l'espressione x instanceof y si limita a controllare la catena di prototipi di x è presente y (in ActionScript 3.0, la catena di prototipi non fornisce un quadro completo della la gerarchia di ereditarietà).

Del dattiloscritto instanceofcondivide gli stessi problemi. Come è un linguaggio che è ancora nella sua evoluzione vi consiglio di affermare una proposta di tale impianto.

Guarda anche:

Risposto il 08/10/2012 a 21:54
fonte dall'utente

voti
8

Tipografico hanno un modo di convalidare il tipo di una variabile in runtime. È possibile aggiungere una funzione di validazione che restituisce un tipo di predicato . Così si può chiamare questa funzione all'interno di un'istruzione if, ed essere sicuri che tutto il codice all'interno di quel blocco è sicuro da usare come il tipo si pensa che è.

Esempio dalla documentazione dattiloscritto:

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();
}

See more at: https://www.typescriptlang.org/docs/handbook/advanced-types.html

Risposto il 21/11/2016 a 10:42
fonte dall'utente

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