Klasse type sjekk med script

stemmer
121

Jeg er veldig spent på typescript , så jeg begynte å leke med den. Som en Actionscript utvikler, gjør det Javascript mindre hardt.

Men i Action er det mulig å sjekke hvilken type ved kjøring bruker er operatør :

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

Er det mulig å oppdage om en variabel (strekker eller) er en viss klasse eller grensesnitt med typescript? Jeg kunne ikke finne noe om det i språk specs, bør det være der når du arbeider med klasser / grensesnitt.


Oppdatering: Noen år senere. Jeg droppet Loggfila veldig fort og begynne å bruke Haxe som kompilerer til utmerket Javascript og har ekte typesjekking som fungerer på klasser, grensesnitt etc. Har også dead-kode fjerning, bedre enums, abstrakte typer og kompilere tidsfunksjoner (makroer), samler også til en fil slik at ingen komplisert bunt build system er nødvendig.

Publisert på 08/10/2012 klokken 20:47
kilden bruker
På andre språk...                            


2 svar

stemmer
166

4.19.4 instanceof operatør

Den instanceofkrever åpneren venstre operand for å være av typen Enhver, en objekttype, eller en type parametertype, og den høyre operand til å være av typen Enhver eller en undertype av 'Funksjon' grensesnitt type. Resultatet er alltid av boolsk primitive typen.

Så du kan bruke

mySprite instanceof Sprite;

Merk at denne aktøren er også i Actionscript, men det bør ikke brukes der lenger:

Den er operatør, noe som er nytt for Action 3.0, gjør det mulig å teste hvorvidt en variabel eller uttrykk er et medlem av en gitt datatype. I tidligere versjoner av Actionscript, instanceof operatør gitt denne funksjonaliteten, men i Actionscript 3.0 skal ikke brukes instanceof operatøren å teste for datatype medlemskap. Den er operatør bør brukes i stedet for instanceof operatør for manuell type sjekking, fordi uttrykket x instanceof y bare sjekker prototype kjede av x for eksistensen av y (og i Actionscript 3.0, prototypen kjeden gir ikke et fullstendig bilde av arvehierarkiet).

Loggfila er instanceofaksjene de samme problemene. Som det er et språk som fortsatt er i sin utvikling anbefaler jeg deg å oppgi et forslag til slike anlegg.

Se også:

Svarte 08/10/2012 kl. 20:54
kilden bruker

stemmer
14

Loggfila har en måte å validere den type en variabel i runtime. Du kan legge til en validering funksjon som returnerer en typen predikat . Så du kan kalle denne funksjonen inne i en hvis setningen, og være sikker på at all koden i den blokken er trygt å bruke som den typen du tror det er.

Eksempel fra script dokumenter:

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

Se mer på: https://www.typescriptlang.org/docs/handbook/advanced-types.html

Svarte 21/11/2016 kl. 10:42
kilden bruker

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