Erste Schritte mit TypeScript

Ende 2012 hat Microsoft TypeScript eingeführt, ein typisiertes Superset für JavaScript, das in einfaches JavaScript übersetzt wird. TypeScript konzentriert sich darauf, nützliche Tools für umfangreiche Anwendungen bereitzustellen, indem Funktionen wie Klassen, Typanmerkungen, Vererbung, Module und vieles mehr implementiert werden. In diesem Lernprogramm beginnen wir mit TypeScript, verwenden einfache Codebeispiele in Bissgröße, kompilieren diese in JavaScript und zeigen die Instant-Ergebnisse in einem Browser an.


Die Tools installieren

TypeScript-Funktionen werden nur zur Kompilierzeit erzwungen.

Sie richten Ihre Maschine entsprechend Ihrer spezifischen Plattform und Ihren Bedürfnissen ein. Benutzer von Windows und Visual Studio können das Visual Studio Plugin einfach herunterladen. Wenn Sie mit Windows arbeiten und kein Visual Studio haben, probieren Sie es mit Visual Studio Express für Web aus. Die TypeScript-Erfahrung in Visual Studio ist anderen Code-Editoren derzeit überlegen.

Wenn Sie sich auf einer anderen Plattform befinden (oder Visual Studio nicht verwenden möchten), benötigen Sie lediglich einen Texteditor, einen Browser und das TypeScript-npm-Paket, um TypeScript verwenden zu können. Befolgen Sie diese Installationsanweisungen:

  1. Node Package Manager (npm) installieren
     $ curl http://npmjs.org/install.sh | sh $ npm - Version 1.1.70
  2. Installieren Sie das TypeScript npm-Paket global in der Befehlszeile:
     $ npm install -g typescript $ npm Ansicht Typoscript-Version npm http GET https://registry.npmjs.org/typescript npm http 304 https://registry.npmjs.org/typescript 0.8.1-1
  3. Jeder moderne Browser: Für dieses Lernprogramm wird Chrome verwendet
  4. Beliebiger Texteditor: Für dieses Lernprogramm wird Sublime Text verwendet
  5. Plug-In für Syntaxhervorhebung für Texteditoren

Das ist es; wir sind bereit, ein einfaches zu machen "Hallo Welt"Anwendung in TypeScript!


Hallo Welt in TypeScript

TypeScript ist eine Obermenge von Ecmascript 5 (ES5) und enthält die für ES6 vorgeschlagenen Funktionen. Aus diesem Grund ist jedes JavaScript-Programm bereits ein TypeScript-Programm. Der TypeScript-Compiler führt lokale Dateiumwandlungen für TypeScript-Programme durch. Daher entspricht die endgültige JavaScript-Ausgabe der TypeScript-Eingabe.

Zuerst erstellen wir eine Basis index.html Datei und Referenz auf eine externe Skriptdatei:

     TypeScript lernen     

Dies ist eine einfache "Hello World" -Anwendung. Erstellen wir also eine Datei mit dem Namen Hallo. Das * .ts Erweiterung bezeichnet eine TypeScript-Datei. Fügen Sie den folgenden Code hinzu Hallo:

 alert ('Hallo Welt in TypeScript!');

Öffnen Sie als Nächstes die Befehlszeilenschnittstelle, und navigieren Sie zu dem Ordner, der den Ordner enthält Hallo, und führen Sie den TypeScript-Compiler mit dem folgenden Befehl aus:

 tsc hallo.ts

Das tsc Befehl ist der TypeScript-Compiler, der sofort eine neue Datei mit dem Namen generiert hallo.js. Unsere TypeScript-Anwendung verwendet keine TypeScript-spezifische Syntax. Daher wird in JavaScript derselbe JavaScript-Code angezeigt hallo.js dass wir geschrieben haben Hallo.

Großartig! Jetzt können wir die Features von TypeScript kennenlernen und sehen, wie es uns helfen kann, umfangreiche JavaScript-Anwendungen zu verwalten und zu erstellen.


Geben Sie Anmerkungen ein

Typanmerkungen sind eine optionale Funktion, mit der wir unsere Absicht in den von uns geschriebenen Programmen überprüfen und ausdrücken können. Lassen Sie uns ein einfaches erstellen Bereich() Funktion in einer neuen TypeScript-Datei mit dem Namen type.ts

 Funktionsbereich (Form: Zeichenfolge, Breite: Anzahl, Höhe: Anzahl) Var Bereich = Breite * Höhe; return "I'm a" + shape + "mit einer Fläche von" + area + "cm squared.";  document.body.innerHTML = Bereich ("Rechteck", 30, 15);

Als nächstes ändern Sie die Skriptquelle in index.html zu type.js und führen Sie den TypeScript-Compiler mit aus tsc type.ts. Aktualisieren Sie die Seite im Browser, und es sollte Folgendes angezeigt werden:

Wie im vorherigen Code gezeigt, werden die Typanmerkungen als Teil der Funktionsparameter ausgedrückt. Sie geben an, welche Arten von Werten Sie an die Funktion übergeben können. Zum Beispiel die gestalten Parameter wird als Stringwert bezeichnet und Breite und Höhe sind numerische Werte.

Typanmerkungen und andere TypeScript-Funktionen werden nur zur Kompilierzeit erzwungen. Wenn Sie diesen Parametern andere Werte übergeben, gibt der Compiler einen Fehler bei der Kompilierung aus. Dieses Verhalten ist beim Erstellen umfangreicher Anwendungen äußerst hilfreich. Zum Beispiel übergeben wir absichtlich einen String-Wert für Breite Parameter:

 Funktionsbereich (Form: Zeichenfolge, Breite: Anzahl, Höhe: Anzahl) Var Bereich = Breite * Höhe; return "I'm a" + shape + "mit einer Fläche von" + area + "cm squared.";  document.body.innerHTML = Bereich ("Rechteck", "Breite", 15); // falscher Breitentyp

Wir wissen, dass dies zu einem unerwünschten Ergebnis führt, und das Kompilieren der Datei weist auf das Problem mit dem folgenden Fehler hin:

 $ tsc type.ts type.ts (6,26): Die angegebenen Parameter stimmen mit keiner Signatur des Anrufziels überein

Beachten Sie, dass der Compiler trotz dieses Fehlers die type.js Datei. Der Fehler hindert den TypeScript-Compiler nicht daran, das entsprechende JavaScript zu generieren. Der Compiler warnt uns jedoch vor möglichen Problemen. Wir beabsichtigen Breite eine Zahl sein Das Weitergeben von etwas anderem führt zu unerwünschtem Verhalten in unserem Code. Andere Typanmerkungen umfassen bool oder auch irgendein.


Schnittstellen

Erweitern wir unser Beispiel, um eine Schnittstelle einzuschließen, die eine Form als ein Objekt mit einem optionalen Objekt beschreibt Farbe Eigentum. Erstellen Sie eine neue Datei mit dem Namen interface.ts, und ändern Sie die Skriptquelle in index.html einschließen interface.js. Geben Sie den folgenden Code ein interface.ts:

 Schnittstelle Shape Name: String; Breite: Anzahl; Höhe: Anzahl; Farbe ?: String;  Funktionsbereich (Shape: Shape) var area = shape.width * shape.height; Rückgabe von "I'm" + Form.Name + "mit Fläche" + Fläche + "cm im Quadrat";  console.log (Bereich (Name: "Rechteck", Breite: 30, Höhe: 15)); console.log (Bereich (Name: "Quadrat", Breite: 30, Höhe: 30, Farbe: "Blau")));

Schnittstellen sind Namen, die Objekttypen gegeben werden. Wir können nicht nur eine Schnittstelle deklarieren, sondern auch als Typanmerkung verwenden.

Kompilieren interface.js führt zu keinen Fehlern. Um einen Fehler hervorzurufen, fügen Sie eine weitere Codezeile an interface.js mit einer Form, die keine Namenseigenschaft hat, und das Ergebnis in der Konsole des Browsers anzeigen. Fügen Sie diese Zeile an interface.js:

 console.log (Bereich (width: 30, height: 15));

Kompilieren Sie nun den Code mit tsc interface.js. Sie erhalten eine Fehlermeldung, aber machen Sie sich jetzt keine Sorgen. Aktualisieren Sie Ihren Browser und sehen Sie sich die Konsole an. Sie sehen etwas ähnlich dem folgenden Screenshot:

Nun sehen wir uns den Fehler an. Es ist:

 interface.ts (26,13): Die angegebenen Parameter stimmen nicht mit der Signatur eines Aufrufziels überein. Der Typ 'Shape' konnte nicht auf Argument 1 angewendet werden, das vom Typ 'width: number; Höhe: Anzahl;  '

Wir sehen diesen Fehler, weil das Objekt an übergeben wurde Bereich() entspricht nicht der Gestalten Schnittstelle; Dafür braucht es eine Namenseigenschaft.


Pfeil Funktionsausdrücke

Den Umfang des verstehen diese Das Schlüsselwort ist eine Herausforderung, und TypeScript macht es etwas einfacher, da es Ausdrücke für Pfeilfunktionen unterstützt, ein neues Feature, das für ECMAScript 6 diskutiert wird. Pfeilfunktionen behalten den Wert von diese, Das Schreiben und Verwenden von Rückruffunktionen wird erheblich vereinfacht. Betrachten Sie den folgenden Code:

 var shape = Name: "Rechteck", popup: function () console.log ('This inside popup ():' + this.name); setTimeout (function () console.log ('This inside setTimeout ():' + this.name); console.log ("Ich bin ein" + this.name + "!");, 3000); ; shape.popup ();

Das dieser Name Zeile sieben wird eindeutig leer sein, wie in der Browserkonsole gezeigt:

Wir können dieses Problem leicht beheben, indem Sie die TypeScript-Pfeilfunktion verwenden. Einfach austauschen Funktion() mit () =>.

 var shape = Name: "Rechteck", popup: function () console.log ('This inside popup ():' + this.name); setTimeout (()) => console.log ('This inside setTimeout ():' + this.name); console.log ("Ich bin ein" + this.name + "!");, 3000); ; shape.popup ();

Und die Ergebnisse:

Werfen Sie einen Blick auf die generierte JavaScript-Datei. Sie werden sehen, dass der Compiler eine neue Variable eingefügt hat, var _this = das;, und benutzte es in setTimeout ()Callback-Funktion zum Verweisen auf Name Eigentum.


Klassen mit öffentlichen und privaten Zugriffsmodifizierern

TypeScript unterstützt Klassen und deren Implementierung folgt stark dem Vorschlag von ECMAScript 6. Erstellen wir eine weitere Datei namens class.ts, und überprüfen Sie die Klassensyntax:

 Klasse Shape Bereich: Nummer; Farbe: String; Konstruktor (Name: String, Breite: Nummer, Höhe: Nummer) this.area = width * height; this.color = "pink"; ; shoutout () return "I'm" + this.color + "" + this.name + "mit einem Bereich von" + this.area + "cm squared.";  var Quadrat = neue Form ("Quadrat", 30, 30); console.log (square.shoutout ()); console.log ('Formbereich:' + Quadratbereich); console.log ('Name der Form:' + Quadratname); console.log ('Farbe der Form:' + Quadratfarbe); console.log ('Width of Shape:' + square.width); console.log ('Höhe der Form:' + Quadrat.Höhe);

Obenstehendes Gestalten Klasse hat zwei Eigenschaften, Bereich und Farbe, ein Konstruktor (passend benannt) Konstrukteur()) sowie ein schreien () Methode. Der Bereich der Konstruktorargumente (Name, Breite und Höhe) sind lokal für den Konstruktor. Deshalb werden Fehler im Browser sowie im Compiler angezeigt:

 class.ts (12,42): Die Eigenschaft 'name' ist bei einem Wert vom Typ 'Shape' nicht vorhanden class.ts (20,40): Die Eigenschaft 'name' ist bei einem Wert des Typs 'Shape' nicht vorhanden. ts (22,41): Die Eigenschaft 'width' ist beim Wert des Typs 'Shape' nicht vorhanden class.ts (23,42): Die Eigenschaft 'height' ist beim Wert des Typs 'Shape' nicht vorhanden

Jedes JavaScript-Programm ist bereits ein TypeScript-Programm.

Als nächstes wollen wir das erkunden Öffentlichkeit und Privatgelände Eingabehilfen Auf öffentliche Mitglieder kann von überall aus zugegriffen werden, während auf private Mitglieder nur innerhalb des Klassenkörpers zugegriffen werden kann. Natürlich gibt es in JavaScript keine Funktion, um den Datenschutz durchzusetzen. Daher wird der private Zugriff nur während der Kompilierung erzwungen und dient als Warnung an die ursprüngliche Absicht des Entwicklers, ihn privat zu machen.

Als Beispiel fügen wir die Öffentlichkeit Eingabehilfemodifizierer für das Konstruktorargument, Name, und ein Privatgelände Eingabehilfemodifizierer für das Mitglied, Farbe. Wenn wir hinzufügen Öffentlichkeit oder Privatgelände Wenn Sie auf ein Argument des Konstruktors zugreifen können, wird dieses Argument automatisch zum Member der Klasse mit dem entsprechenden Zugriffsmodifizierer.

… Private Farbe: Zeichenfolge;… Konstruktor (öffentlicher Name: Zeichenfolge, Breite: Nummer, Höhe: Nummer) … 
 class.ts (24,41): Die Eigenschaft 'color' ist bei einem Wert vom Typ 'Shape' nicht vorhanden.

Erbe

Schließlich können Sie eine vorhandene Klasse erweitern und eine erstellen abgeleitete Klasse davon mit dem erweitert Stichwort. Hängen wir den folgenden Code an die vorhandene Datei an, class.ts, und kompilieren Sie es:

 Klasse Shape3D erweitert Shape Volumen: Anzahl; Konstruktor (öffentlicher Name: String, Breite: Nummer, Höhe: Nummer, Länge: Nummer) super (Name, Breite, Höhe); this.volume = length * this.area; ; shoutout () return "I'm" + this.name + "mit einem Volume von" + this.volume + "cm cube.";  superShout () return super.shoutout ();  var cube = new Shape3D ("cube", 30, 30, 30); console.log (cube.shoutout ()); console.log (cube.superShout ());

Mit dem abgeleiteten geschieht einiges Shape3D Klasse:

  • Weil es vom hergeleitet wird Gestalten Klasse erbt das Bereich und Farbe Eigenschaften.
  • Innerhalb der Konstruktormethode die Super Methode ruft den Konstruktor der Basisklasse auf, Gestalten, vorbei am Name, Breite, und Höhe Werte. Vererbung ermöglicht uns die Wiederverwendung des Codes von Gestalten, so können wir leicht berechnen dieses.Volumen mit dem vererbten Bereich Eigentum.
  • Die Methode schreien () überschreibt die Implementierung der Basisklasse und eine neue Methode superShout () ruft die Basisklasse direkt auf schreien () Methode mit der Super Stichwort.
    • Mit nur wenigen zusätzlichen Codezeilen können Sie eine Basisklasse einfach erweitern, um spezifischere Funktionen hinzuzufügen und unsere Absicht durch TypeScript bekannt zu machen.


      TypeScript-Ressourcen

      Trotz des extrem jungen Alters von TypeScript finden Sie viele nützliche Ressourcen in der Sprache des Internets (einschließlich eines vollständigen Kurses, der zu Tuts + Premium kommt!). Achten Sie darauf, diese zu überprüfen:

      • Hauptwebsite
      • Tutorials und Beispiele
      • Live-Code-Editor mit JavaScript-Ausgabe
      • Code-Repository für Diskussionen und Fehlerverfolgung
      • Was ist TypeScript? vom Entwicklerteam
      • Liste der Dokumentationen für TypeScript

      Wir fangen gerade erst an

      TypeScript unterstützt Klassen und deren Implementierung folgt stark dem Vorschlag von ECMAScript 6.

      Das Testen von TypeScript ist einfach. Wenn Sie einen statisch typisierten Ansatz für große Anwendungen bevorzugen, erzwingen die Features von TypeScript eine vertraute, disziplinierte Umgebung. Obwohl es mit CoffeeScript oder Dart verglichen wurde, unterscheidet sich TypeScript dadurch, dass es JavaScript nicht ersetzt. es fügt JavaScript Funktionen hinzu.

      Wir haben noch nicht gesehen, wie sich TypeScript weiterentwickeln wird, aber Microsoft hat erklärt, dass es seine vielen Funktionen (Typanmerkungen) mit ECMAScript 6 in Einklang bringen wird. Wenn Sie also viele der neuen ES6-Funktionen ausprobieren möchten, ist TypeScript die ideale Lösung eine ausgezeichnete Möglichkeit, dies zu tun! Los, probieren Sie es aus!