Clasa de verificare tip cu masina de scris

voturi
107

Sunt foarte încântat de typescript , așa că am început să se joace cu ea. În calitate de dezvoltator ActionScript, face Javascript mai greu.

Cu toate acestea, în ActionScript este posibil să se verifice tipul în timpul rulării folosind operatorul este :

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

Este posibil pentru a detecta dacă o variabilă (sau extinde) este o anumită clasă sau interfață cu mașina de scris? Nu am putut găsi nimic în specificațiile lingvistice, ar trebui să fie acolo atunci când se lucrează cu clase / interfețe.


Actualizare: Câțiva ani mai târziu. Am renuntat typescript foarte rapid și începe să utilizați haXe care compilează spre excelent JavaScript și are reale de verificare tip care funcționează pe clase, interfețe , etc. De asemenea , are eliminare cod mort, enums mai bine, tipuri abstracte și timpul de compilare funcții (macro - uri), de asemenea , compilează la un fișier astfel încât nu este necesar un sistem complex pachet construi.

Întrebat 08/10/2012 la 21:47
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
142

4.19.4 Operatorul instanceof

instanceofOperatorul cere operandul din stânga să fie de tip Orice, un tip de obiect, sau un tip de parametru de tip, iar operandul dreptul de a fi de tip Orice sau un subtip al „Funcția“ tip de interfață. Rezultatul este întotdeauna de tip primitiv boolean.

Deci, ai putea folosi

mySprite instanceof Sprite;

Rețineți că acest operator este, de asemenea, în ActionScript, dar nu ar mai trebui folosite acolo:

Operatorul este, care este nou pentru ActionScript 3.0, vă permite să testați dacă o variabilă sau o expresie este un membru al unui tip de date dat. În versiunile anterioare ale ActionScript, operatorul instanceof cu condiția ca această funcționalitate, dar în ActionScript 3.0 operatorul instanceof nu ar trebui să fie utilizat pentru a testa calitatea de membru tip de date. Operatorul IS ar trebui să fie utilizat în locul operatorului instanceof pentru tipul de verificare manuală, deoarece expresia instanceof x y verifica doar lanțul prototip x pentru existența y (și în ActionScript 3.0, lanțul de prototip nu oferă o imagine completă a ierarhia moștenire).

Typescript lui instanceofparts aceleași probleme. Deoarece este o limbă care este încă în dezvoltare IT Vă recomandăm să indice o propunere de astfel de facilitate.

Vezi si:

Publicat 08/10/2012 la 21:54
sursa de către utilizator

voturi
8

Typescript au o modalitate de a valida tipul unei variabile în timpul rulării. Puteți adăuga o funcție de validare care returnează un predicat de tip . Deci , puteți apela această funcție în interiorul unei if, și asigurați - vă că toate codul din interiorul acelui bloc este sigur de a utiliza ca tip de crezi că este.

Exemplu de docs dactilografiat:

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

Vezi mai multe la: https://www.typescriptlang.org/docs/handbook/advanced-types.html

Publicat 21/11/2016 la 10:42
sursa de către utilizator

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