Produse și tehnologii:
Articolul ia în considerare:
De exemplu, cum ar fi C #, TypeScript este un limbaj scris care vă oferă suport IntelliSense și compilați verificări, ca să nu mai vorbim de alte instrumente. La fel ca C #, TypeScript include generalizări și expresii lambda (sau echivalentele lor).
TypeScript - o limbă cu tastarea datelor
În acest exemplu, variabila este declarată ca șir:
Aproape toate tastarea datelor în TypeScript este opțională.
Datorită generării structurale a subtipurilor, pot aplica CustomerDevient cu variabile definite în clasa CustomerShort sau interfața ICustomerShort. În următoarele exemple, CustomerDeviant este utilizat interschimbabil cu variabilele declarate ca CustomerShort sau ICustomerShort:
Moștenirea în TypeScript funcționează diferit
Toate acestea vă arată familiare, dacă sunteți un programator C #, cu excepția unor cuvinte cheie ciudate (cum ar fi extinde). Dar extinderea clasei sau a interfeței nu este la fel ca mecanismele de moștenire din C #. Specificația TypeScript folosește termenii obișnuiți pentru o clasă extensibilă (clasa de bază) și o clasă care o extinde (o clasă derivată). Cu toate acestea, această specificație, de exemplu, se referă la specificația de moștenire a clasei, în locul folosirii cuvântului "moștenire".
Mai întâi, există mai puține alegeri în TypeScript decât în C # atunci când este vorba de definirea claselor de bază. Nu puteți să declarați o clasă sau membri drept non-suprasolicitabili, cum ar fi abstract sau virtual (deși interfețele oferă aceeași funcționalitate ca și clasele de bază virtuale).
Nu există nicio modalitate de a preveni moștenirea de la unii membri. O clasă derivată moștenește toți membrii clasei de bază, inclusiv membrii publici și cei privați (toți membrii deschisi ai clasei de bază pot fi supraîncărcați și membrii privați nu pot). Pentru a suprascrie un membru deschis, pur și simplu definiți membrul din clasa derivată cu aceeași semnătură. Deși puteți utiliza super-cuvântul cheie pentru a accesa o metodă deschisă dintr-o clasă derivată, acest cuvânt cheie nu vă permite să accesați o proprietate din clasa de bază (dar puteți înlocui proprietatea).
Fig. 5. Interfața ICustomerMerge este definită prin două definiții de interfață
Clasele pot extinde alte clase, dar nu și interfețe. În interfețele TypeScript, interfețele pot extinde clasele, dar numai într-un mod care folosește moștenirea. Extinderea clasei, interfața include toți membrii clasei (deschisă și închisă), dar fără implementări de clasă. În Fig. 6 interfața ICustomer va primi un id de membru privat, un Id de membru deschis și un membru deschis MiddleName.
Fig. 6. Clasa avansată cu toți membrii
Interfața ICustomer are o limitare semnificativă: o puteți utiliza numai cu clase care extind aceeași clasă care este extinsă de interfață (în acest caz, clasa Client). TypeScript cere să includeți membri privați într-o interfață care trebuie moștenită din clasa pe care o extinde această interfață, mai degrabă decât să le reimplementați în clasa derivată. O nouă clasă care utilizează interfața ICustomer ar trebui, de exemplu, să furnizeze o implementare pentru MiddleName (deoarece este specificată doar în interfață). Un dezvoltator care utilizează ICustomer ar putea alege fie moștenire, fie o suprascriere a metodelor deschise ale clasei Client, dar nu a putut suprascrie ID-ul de membru privat.
Clasele pot extinde alte clase în același mod ca și pentru interfețe.
Următorul exemplu prezintă o clasă (numită NewCustomer) care implementează interfața ICustomer și extinde clasa Client în funcție de necesități. În acest exemplu, NewCustomer moștenește implementarea ID-ului de la client și oferă o implementare pentru MiddleName:
TypeScript știe despre bibliotecile tale
"Documentația de citire", desigur, implică faptul că beneficiați de suport IntelliSense pentru datele tipărite și verificarea fazei de compilare atunci când utilizați obiecte care alcătuiesc biblioteca. În plus, permite tipuluiScript, în anumite circumstanțe, să recunoască logic tipul unei variabile de contextul în care este aplicată. Datorită fișierului de definire lib.d.ts inclus în TypeScript, acest limbaj presupune că ancora variabilă este de tipul HTMLAnchorElement în următorul cod:
Fișierul de definiție indică faptul că acesta este rezultatul returnat de metoda createElement, când șirul "a" îi este transmis. Știind că ancora este un HTMLAnchorElement, TypeScript știe că ancora variabilă va suporta, de exemplu, metoda addEventListener.
Recunoașterea logică a tipurilor de date din TypeScript funcționează și cu tipurile de parametri. De exemplu, metoda addEventListener are doi parametri. A doua este funcția prin care addEventListener trece un obiect de tip PointerEvent. TypeScript știe acest lucru și susține accesul la proprietatea cancelBubble a clasei PointerEvent în interiorul funcției:
Dacă sunteți interesat de detaliile despre modul în care să folosiți TypeScript cu Backbone și Knockout, citiți articolele din secțiunea "Tip practic" pe bit.ly/1BRh8NJ. În noul an, voi lua în considerare detaliile de utilizare a tipului cu Angular.
Peter Vogel (Peter Vogel) - unul dintre liderii companiei PHV Information Services, specializata in dezvoltarea de aplicatii web, un expert pe SOA, dezvoltarea de software client si design UI. Clienții PHV includ Bank of Commerce Canadian Imperial, Volvo și Microsoft. De asemenea, studiază și scrie cursuri de instruire pentru Learning Tree International. Aceasta conduce rubrica Practical. NET pe site-ul VisualStudioMagazine.com.
Îmi exprim recunoștința pentru revizuirea articolului către expertul Microsoft, Ryan Cavanaugh (Ryan Cavanaugh).