TypeScript Tutorial: Was sind Interfaces, Enums und Arrays?

โšก Intelligente Zusammenfassung

TypeScript ist eine stark typisierte Obermenge von JavaSkript, das zu einfachem Code kompiliert wird JavaDieses Skript fรผgt Klassen, Schnittstellen, Aufzรคhlungen, Module und Namensrรคume hinzu. Der Artikel behandelt die Installation, Variablen, Typen, Arrays, Klassen, Zugriffsmodifizierer, Schnittstellen, Funktionen, Aufzรคhlungen, Module und Umgebungsdeklarationen.

  • ๐Ÿงฌ Sprachliche Beziehung: Jede gรผltige JavaDas Skriptprogramm ist gรผltig TypeScriptund der Compiler gibt einfachen Code aus JavaSkript fรผr jede Zielversion.
  • ๐Ÿ”’ Statische Typing: Eine Variable behรคlt den bei der Deklaration angegebenen Typ bei, sodass ein Typkonflikt bereits zur Kompilierzeit und nicht erst zur Laufzeit gemeldet wird.
  • ๐Ÿงฑ Objektorientierung: Klassen, Vererbung sowie die Modifikatoren public, private und protected bringen eine vertraute Struktur in den Browsercode.
  • ๐Ÿ“ Schnittstellen: Eine Schnittstelle definiert eine Verbindungtract von Eigenschaften und Methoden, die eine Variable, Funktion oder Klasse erfรผllen muss.
  • ๐Ÿ”ข Aufzรคhlungen: Benannte Konstantensรคtze werden zu selbstaufrufenden Funktionen kompiliert, da JavaDas Skript besitzt keinen nativen Enum-Typ.
  • ๐Ÿ“ฆ Module: Export und Import sorgen dafรผr, dass Deklarationen lokal in einer Datei bleiben und globale Namenskonflikte vermieden werden.
  • ???? Umgebungsdeklarationen: Eine .d.ts-Datei beschreibt eine Drittpartei JavaSkriptbibliothek, sodass die Typรผberprรผfung ohne Neuschreiben des Codes erfolgen kann.

TypeScript Benutzerhandbuch

Was ist TypeScript?

TypeScript ist eine Obermenge von JavaSkript. TypeScript ist eine objektorientierte Programmiersprache, die Klassen, Schnittstellen und mehr unterstรผtzt. Es handelt sich um eine Open-Source-Sprache, die von entwickelt wurde. Microsoft das den Code statisch kompiliert zu JavaSkript. Es lรคsst sich problemlos im Browser oder in Node.js ausfรผhren.

Alle neuesten Features fรผr ECMAScript werden unterstรผtzt in TypeScriptund auรŸerdem TypeScript verfรผgt รผber eigene objektorientierte Merkmale wie Schnittstellen, Umgebungsdeklarationen und Klassenvererbung, die bei der Entwicklung helfen.ping eine groรŸe Anwendung, die andernfalls schwer zu entwickeln wรคre JavaSkript.

Die Beziehung ist einseitig. Jede gรผltige JavaDie Skriptdatei ist bereits gรผltig. TypeScriptDas Umgekehrte ist jedoch nicht wahr, da Typannotationen nur in TypeScript und werden wรคhrend der Kompilierung gelรถscht.

Warum TypeScript?

Hier sind die wichtigsten Vorteile der Verwendung TypeScript:

  • GroรŸe und komplexe Projekte in JavaSkripte sind schwierig zu codieren und zu warten.
  • TypeScript Hilft sehr bei der Codeorganisation und beseitigt die meisten Fehler bereits wรคhrend der Kompilierung anstatt zur Laufzeit.
  • TypeScript Unterstรผtzt JS-Bibliotheken und API-Dokumentation.
  • Es handelt sich um eine optional typisierte Skriptsprache, sodass Typen schrittweise eingefรผhrt werden kรถnnen.
  • TypeScript Code kann in einfachen Code umgewandelt werden JavaSkriptcode fรผr jedes Browserziel.
  • Es ermรถglicht eine bessere Code-Strukturierung und objektorientierte Programmiertechniken.
  • Es ermรถglicht eine bessere Unterstรผtzung der Entwicklungstools, einschlieรŸlich Autovervollstรคndigung und sicherem Refactoring.
  • Sie kann die Sprache รผber den Standard hinaus erweitern, beispielsweise durch Funktionen wie Dekoratoren.

Der grรถรŸte praktische Vorteil liegt in der Unterstรผtzung durch den Editor. Da der Compiler die Struktur jedes Wertes kennt, kann ein Editor eine Eigenschaft im gesamten Projekt umbenennen und jede Stelle melden, an der die รœbereinstimmung nicht mehr gegeben ist.

TypeScript Geschichte

Werfen wir einen Blick auf die wichtigsten Meilensteine โ€‹โ€‹der Geschichte von TypeScript:

  • Nach zwei Jahren interner Entwicklung bei Microsoft, TypeScript Version 0.9 wurde 2013 verรถffentlicht.
  • TypeScript Version 1.0 mit zusรคtzlicher Unterstรผtzung fรผr Generika wurde auf der Build 2014 verรถffentlicht.
  • Im Juli 2014 eine neue TypeScript Ein neuer Compiler wurde eingefรผhrt, der fรผnfmal schneller war als die vorherige Version.
  • Im Juli 2015 wurde die Unterstรผtzung fรผr ES6-Module, das Namespace-Schlรผsselwort, forโ€ฆof und Dekoratoren hinzugefรผgt.
  • Im November 2016 wurden zugeordnete Typen, Schlรผssel- und Nachschlagetypen sowie Objektrest und -verteilung hinzugefรผgt.
  • Am 27. Mรคrz 2018 wurden bedingte Typen und ein verbesserter keyof-Wert mit Schnittmengentypen hinzugefรผgt.
  • TypeScript Version 5.0, verรถffentlicht im Mรคrz 2023, modernisierte Dekoratoren und reduzierte die VerpackungsgrรถรŸe.
  • TypeScript Version 6.0 erschien im Mรคrz 2026 als finale Version, die auf der vorherigen Version aufbaute. JavaSkript-Quellcodebasis.
  • TypeScript Version 7.0 stellt den Compiler auf eine native Go-Implementierung um, welche Microsoft Berichten zufolge ist es etwa zehnmal schneller als 6.0.

Wer benutzt TypeScript?

TypeScript ist keine Nischenwahl mehr. Es bildet die Grundlage fรผr einige der am weitesten verbreiteten Frontend- und Backend-Tools, und die folgende Liste zeigt, wo ein Anfรคnger am ehesten damit in Berรผhrung kommt.

  • Winkel: Das Angular-Framework ist geschrieben in TypeScriptEs wird erwartet, dass auch der Anwendungscode darin geschrieben wird.
  • React- und Vue-Projekte: Beide ร–kosysteme versenden offizielle Schiffe TypeScript Vorlagen und die meisten modernen Starter-Systeme aktivieren diese Funktion standardmรครŸig.
  • Node.js-Backends: Server-Frameworks wie NestJS basieren auf โ€ฆ TypeScript Klassen und Dekorateure.
  • Editorwerkzeuge: Visual Studio Code ist selbst ein groรŸes TypeScript Die Codebasis erklรคrt auch die umfassende Sprachunterstรผtzung.
  • Frontends fรผr groรŸe Unternehmen: Teams, die mit vielen Mitwirkenden arbeiten, nutzen es, um Integrationsfehler vor der Bereitstellung zu erkennen.

Herunterladen und Installieren TypeScript

Hier ist die Schritt-fรผr-Schritt-Anleitung zum Herunterladen und Installieren TypeScript:

Schritt 1) โ€‹โ€‹Laden Sie Nodejs herunter und installieren Sie es

Besuchen Sie die offizielle Website von Node.js, https://nodejs.org/en/download/Laden Sie Node.js fรผr Ihr Betriebssystem herunter und installieren Sie es. Eine detaillierte Anleitung finden Sie im Leitfaden unter [Link einfรผgen]. Wie man Node.js herunterlรคdt und installiert.

Schritt 2) รœberprรผfen Sie die Nodejs- und NPM-Version

Um zu รผberprรผfen, ob Node.js und npm installiert sind, prรผfen Sie die Version in Ihrer Eingabeaufforderung.

D:\typeproject>node --version
v22.14.0

D:\typeproject>npm --version
10.9.2

Jede aktuelle Node LTS-Version funktioniert. TypeScript Fรผr die Ausfรผhrung des Compilers wird lediglich eine unterstรผtzte Node-Version benรถtigt.

Schritt 3) TypeScript Installation

Erstellen Sie Ihr Projektverzeichnis typeproject\ und fรผhren Sie npm init aus, wie im folgenden Befehl gezeigt:

npm init

Schritt 4) Starten Sie die Installation

Dadurch wird eine package.json-Datei erstellt, in der die Abhรคngigkeiten fรผr unser Projekt gespeichert werden.

Wenn Sie fertig sind, installieren Sie TypeScript wie folgt:

npm -g install typescript

Der obige Befehl รผbernimmt die Installation TypeScript. Durch Hinzufรผgen von โ€ž-gโ€œ zu npm install wird installiert TypeScript global. Der Vorteil der Verwendung von -g besteht darin, dass Sie die TypeScript tsc Der Befehl kann aus jedem Verzeichnis ausgefรผhrt werden, da es global installiert ist. Falls Sie es nicht installieren mรถchten TypeScript Verwenden Sie global den folgenden Befehl:

npm install --save-dev typescript

Erstellen Sie einen Ordner โ€žsrc\โ€œ in Ihrem Projektverzeichnis und erstellen Sie darin die folgenden Dateien: TypeScript Datei test.ts und schreiben Sie Ihren Code.

Beispiel: test.ts

function add(x:number, y:number) {
	return x+y;
}

let sum = add(5,10);
console.log(sum);

Kompilieren TypeScript Code zu Javascript

Um den obigen Code zu kompilieren, verwenden Sie den folgenden Befehl.

If TypeScript ist global installiert. Verwenden Sie dazu den folgenden Befehl:

tsc test.ts

If TypeScript Wenn die Installation lokal in Ihrem Projekt erfolgt, mรผssen Sie den Pfad verwenden. TypeScript Aus node_modules, wie gezeigt, oder fรผhren Sie es รผber npx aus:

node_modules\typescript\bin\tsc test.ts

OR

npx tsc test.ts

Der obige Befehl erstellt eine test.js-Datei, in der der Code kompiliert wird. JavaSkript.

Beispiel: test.js

function add(x, y) {
    return x + y;
}
var sum = add(5, 10);
console.log(sum);

Ausfรผhren Javascript mit Nodejs

Nun fรผhren wir test.js in Node.js wie folgt aus:

D:\typeproject\src>node test.js
15

Der an console.log รผbergebene Wert wird angezeigt, wenn test.js ausgefรผhrt wird.

Ausfรผhren JavaSkript im Browser

Ejemplo:

<html>
<head></head>
<body>
<script type="text/javascript" src="test.js"></script>
</body>
</html>

Ausfรผhren Javascript mit Nodejs

Kompilieren TypeScript Code zu Javascript mit EcmaScript-Version

TypeScript Es unterstรผtzt alle verรถffentlichten ECMAScript-Funktionen, die Entwickler beim Programmieren nutzen kรถnnen. Allerdings werden nicht alle neuen Funktionen von รคlteren Browsern unterstรผtzt, sodass Sie mรถglicherweise in eine รคltere ECMAScript-Version kompilieren mรผssen. TypeScript bietet Compileroptionen, die genau das tun.

Beispiel: test.ts

var addnumbers = (a, b) => {
    return a+b;
}

addnumbers(10, 20);

Um die ES-Version Ihrer Wahl zu kompilieren, kรถnnen Sie die Option โ€žtargetโ€œ oder โ€žtโ€œ in Ihrem Befehl wie folgt verwenden:

tsc --target ES6  test.ts

OR

tsc -t ES6 test.ts

StandardmรครŸig ist ES3 als Zielsprache fรผr den klassischen Compiler eingestellt. Falls Sie dies รคndern mรถchten, kรถnnen Sie den oben genannten Befehl verwenden.

Aktuell verwenden wir ES6 als Zielplattform:

tsc --target ES6  test.ts

test.ts zu test.js

var addnumbers = (a, b) => {
    return a+b;
}

addnumbers(10, 20);

Der Code bleibt unverรคndert, da die von Ihnen verwendete Pfeilfunktion ein ES6-Feature ist und sich auch nach der Kompilierung zu ES6 nicht รคndert.

StandardmรครŸig ist das Ziel ES3, daher erhรคlt man ohne Angabe eines Ziels test.js wie folgt:

var addnumbers = function (a, b) {
    return a + b;
};
addnumbers(10, 20);

Hier wird also der fette Pfeil in eine normale anonyme Funktion umgewandelt.

๐Ÿ’ก Tipp: Anstatt die Optionen jedes Mal in der Befehlszeile anzugeben, fรผhren Sie Folgendes aus: tsc --init um eine tsconfig.json-Datei zu generieren. Der Compiler liest dann die Einstellungen target, outDir und strict fรผr das gesamte Projekt aus dieser Datei.

Variablen in TypeScript

Variablen werden zum Speichern von Werten verwendet und der Wert kann eine Zeichenfolge, eine Zahl, ein Boolean-Wert oder ein Ausdruck sein. Wenn es um Variablen in TypeScript, sie รคhneln JavaSkriptLernen wir also, Variablen zu deklarieren und ihnen Werte zuzuweisen. TypeScript.

Variablen kรถnnen im Code nicht verwendet werden, ohne definiert zu sein. Um eine Variable zu deklarieren, kรถnnen Sie Folgendes verwenden:

jung Stichwort,

lassen Stichwort

const Stichwort

Arbeiten mit Variablen in TypeScript รคhnelt JavaSkript und Benutzer, die mit JavaDas Skript wird es sehr leicht finden. In modernem Code, lassen und const werden bevorzugt jung, weil ihr Blockbereich eine ganze Klasse von Fehlern verhindert.

Variablen mit var deklarieren

Syntax:

var firstname = "Roy";

Werfen wir einen Blick auf einige davon. TypeScript Beispiele zum Verstรคndnis der Funktionsweise des Schlรผsselworts `var` und des Gรผltigkeitsbereichs von Variablen, die mit diesem Schlรผsselwort deklariert werden. jung Stichwort.

Beispiel 1:

var k = 1; // variable k will have a global scope

function test() {
    var c = 1; // variable c is local and accessible only inside function test
    return k++;
}

test(); // output as 1
test(); // output as 2
alert(c); // will throw error, Uncaught ReferenceError: c is not defined

Beispiel 2:

var t = 0; // variable t is declared in global scope
function test() {
    var t = 10; // t is redeclared inside the function, so changes stay local
    return t;
}
test(); // will return 10
console.log(t); // will console 0

Beispiel 3:

var i = 0;
function test() {
    if (i > 0) {
      var t = 1;
    }
    return t;
}

test(); // returns undefined. The if block did not run, yet t is still declared
        // because var declarations are hoisted to the whole function.
i++;    // value of i is incremented
test(); // since i > 0 the if block runs and the value returned is 1

Variablen mit let deklarieren

Das TypeScript Die Syntax fรผr let ist wie folgt:

Syntax:

let name = "Roy";

Die Arbeit der lassen Die Variable ist nahezu identisch mit jungAllerdings mit einem wichtigen Unterschied, den das folgende Beispiel verdeutlicht.

Ejemplo:

let i = 1;
function test() {
    if (i > 0) {
	  let t = 1;
    }
    return t;
}

test(); // throws an error: Cannot find name 't'

Die obige TypeScript Das Beispiel wirft einen Fehler, aber derselbe Code hรคtte mit dem jung Schlรผsselwort. Variablen, die mit dem Schlรผsselwort deklariert wurden. lassen sind nur innerhalb des Blocks verfรผgbar, in dem sie deklariert sind. In diesem Beispiel existiert t nur innerhalb des if-Blocks, nicht in der gesamten Funktion.

Dasselbe gilt innerhalb jeder Funktion, for-Schleife, while-Schleife oder switch-Block. Eine let-Variable ist nur innerhalb dieses Blocks verfรผgbar; der Zugriff darauf auรŸerhalb fรผhrt zu einem Fehler. Dies ist der Hauptunterschied zwischen var und let.

Variablen mit const deklarieren

โ€žConstโ€œ bedeutet Konstante. Sie รคhneln โ€žletโ€œ-Variablen, mit dem Unterschied, dass ein einmal zugewiesener Wert nicht mehr geรคndert werden kann. Eine โ€žconstโ€œ-Deklaration muss daher in derselben Zeile initialisiert werden.

Syntax:

const name = "Roy";

Ejemplo:

const age = "25";
age = "30"; // error: Cannot assign to 'age' because it is a constant

const total; // error: 'const' declarations must be initialized

Verwenden Sie also `const` immer dann, wenn Sie sicher sind, dass der zugewiesene Wert nicht neu zugewiesen wird. Beachten Sie, dass `const` die Neuzuweisung der Bindung verhindert, nicht aber die ร„nderung des Objekts, auf das es verweist.

Typen in TypeScript

TypeScript ist eine stark typisierte Sprache, wรคhrend JavaDas Skript ist es nicht. Eine Variable, deren Wert als Zeichenkette definiert ist, kann problemlos in eine Zahl geรคndert werden. JavaDasselbe wird im Drehbuch nicht toleriert. TypeScript. in TypeScriptDer Datentyp einer Variablen wird zu Beginn definiert und muss wรคhrend der gesamten Ausfรผhrung beibehalten werden. Jede ร„nderung fรผhrt zu einem Kompilierfehler. JavaSkript.

Folgende Grundtypen gibt es:

Typ Akzeptiert Beispieldeklaration
Anzahl Ganze Zahlen, Gleitkommazahlen und Brรผche sei a: Zahl = 10;
Schnur Nur Textwerte let s: string = โ€œhelloโ€;
boolean nur wahr oder falsch let b: boolean = true;
fรผr Beliebiger Wert, keine Prรผfung. sei x: beliebig = 123;
ungรผltig Fehlen eines Rรผckgabewerts Funktion f(): void {}

Nummer

Akzeptiert nur ganze Zahlen, Gleitkommazahlen, Brรผche und รคhnliche numerische Werte.

Syntax:

let a :number = 10;
let marks :number = 150;
let price :number = 10.2;

Hier sind einige wichtige Methoden, die auf Zahlentypen angewendet werden kรถnnen:

toFixed() โ€“ Es wandelt die Zahl in eine Zeichenkette um und behรคlt die der Methode รผbergebenen Dezimalstellen bei.

toString () โ€“ Diese Methode wandelt die Zahl in eine Zeichenkette um.

Wert von() โ€“ Diese Methode gibt den Grundwert der Zahl zurรผck.

toPrecision() โ€“ Diese Methode formatiert die Zahl auf eine angegebene Lรคnge.

Beispiel: mit allen Zahlenmethoden

let _num :number = 10.345;
_num.toFixed(2);      // "10.35"
_num.valueOf();      // 10.345
_num.toString();     // "10.345"
_num.toPrecision(2); // "10"

Schnur

Zeichenkette: Nur Zeichenkettenwerte.

Syntax:

let str :string = "hello world";

Hier sind einige wichtige Methoden, die auf Zeichenketten angewendet werden kรถnnen:

  • gespalten() โ€“ Diese Methode teilt die Zeichenkette in ein Array auf.
  • charat() โ€“ Diese Methode liefert das Zeichen am angegebenen Index.
  • Index von() โ€“ Diese Methode gibt die Position des ersten Vorkommens des ihr รผbergebenen Wertes an.
  • ersetzen() โ€“ Diese Methode benรถtigt zwei Zeichenketten. Sie sucht nach dem ersten Wert in der Zeichenkette und ersetzt ihn, falls vorhanden, durch den zweiten Wert, wodurch eine neue Zeichenkette zurรผckgegeben wird.
  • trimmen() โ€“ Diese Methode entfernt Leerzeichen von beiden Seiten der Zeichenkette.
  • substr() โ€“ Diese Methode gibt einen Teil der Zeichenkette zurรผck, abhรคngig von der Startposition und der angegebenen Lรคnge.
  • Teilzeichenfolge() โ€“ Diese Methode gibt einen Teil der Zeichenkette zurรผck, abhรคngig von der Start- und Endposition. Das Zeichen an der Endposition wird ausgeschlossen.
  • zuGroรŸbuchstaben() โ€“ wandelt die Zeichenkette in GroรŸbuchstaben um.
  • toLowerCase() โ€“ wandelt die Zeichenfolge in Kleinbuchstaben um.

Ejemplo:

let _str:string = "Typescript";

_str.charAt(1);                // y
_str.split("");                // ["T","y","p","e","s","c","r","i","p","t"]
_str.indexOf("s");             // 4, gives -1 if the value does not exist
_str.replace("Type", "Coffee"); // "Coffeescript"
_str.trim();                    // "Typescript"
_str.substr(4, _str.length);   // "script"
_str.substring(4, 10);         // "script"
_str.toUpperCase();             // "TYPESCRIPT"
_str.toLowerCase();             // "typescript"

Boolean

Ein boolescher Wert akzeptiert nur die logischen Werte โ€žtrueโ€œ und โ€žfalseโ€œ. Im Gegensatz zu einfachen Datentypen JavaIm Skript werden die Zahlen 0 und 1 nicht akzeptiert, da sie vom Typ Zahl sind.

Syntax:

let status :boolean = true;
let isDone :boolean = false;

let bflag :boolean = 1;
// error: Type 'number' is not assignable to type 'boolean'

Jedes

Syntax:

let a :any = 123
a = "hello world"; // changing type will not give any error.

Variablen, die mit dem fรผr Der Typ kann eine Zeichenkette, eine Zahl, ein Array, einen booleschen Wert oder einen leeren Wert enthalten. TypeScript wird keinen Kompilierfehler auslรถsen, was Variablen in JavaSkript. Verwenden Sie den Typ "any" nur dann, wenn Sie sich รผber den Typ des Wertes, der dieser Variablen zugeordnet wird, nicht sicher sind, da dadurch jede รœberprรผfung dieses Wertes deaktiviert wird.

Leere

Der Typ Void wird meist als Rรผckgabetyp einer Funktion verwendet, die nichts zurรผckgibt.

Syntax:

function testfunc():void{
 //code here
}

TypeScript Feld

An Feld in TypeScript ist ein Datentyp, in dem mehrere Werte gespeichert werden kรถnnen. Lernen wir, wie man Arrays deklariert und ihnen Werte fรผr Operationen zuweist. TypeScript.

Da TypeScript Da es sich um eine statisch typisierte Sprache handelt, muss der Datentyp der Werte in einem Array angegeben werden. Andernfalls werden sie als vom Typ โ€žanyโ€œ behandelt.

Deklarieren und initialisieren Sie ein Array

Syntax:

let nameofthearray : Array<typehere>

Beispiel

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; // array with all string values

let years: Array<number> = [2015, 2016, 2017, 2018, 2019]; // array with all numbers

let month_year: Array<string | number> = ["Jan", 2015, "Feb", 2016]; // mixed

let alltypes: Array<any> = [true, false, "Harry", 2000, { "a": "50", "b": "20" }]; // any type

Verschiedene Mรถglichkeiten, auf Elemente aus einem Array zuzugreifen

Um die Elemente eines Arrays zu erhalten, beginnen die Werte bei Index 0 und enden bei der Lรคnge des Arrays minus eins.

let years: Array<number> = [2016, 2017, 2018, 2019];
years[0]; // output will be 2016
years[1]; // output will be 2017
years[2]; // output will be 2018
years[3]; // output will be 2019

Sie kรถnnen die Elemente eines Arrays auch mithilfe eines Arrays abrufen. TypeScript fรผr Schleife, Wie nachfolgend dargestellt.

Die Verwendung von TypeScript for-Schleife

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i = 0; i < years.length; i++) {
     console.log(years[i]);
}

Ausgang:

2016
2017
2018
2019

โš ๏ธ Warnung: Die Schleifenbedingung muss lauten: i < years.length. Schreiben i <= years.length Fรผhrt eine zusรคtzliche Iteration durch und gibt aus undefinedweil der letzte gรผltige Index immer die Lรคnge minus eins ist.

For-In-Schleife verwenden

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i in years) {
     console.log(years[i]);
}

Ausgang:

2016
2017
2018
2019

Verwendung einer for-of-Schleife

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i of years) {
     console.log(i);
}

Ausgang:

2016
2017
2018
2019

Verwendung der forEach-Schleife

let years: Array<number> = [2016, 2017, 2018, 2019];
years.forEach(function(yrs, i) {
  console.log(yrs);
});

Ausgang:

2016
2017
2018
2019

TypeScript Array-Methoden

Das TypeScript Das Array-Objekt verfรผgt รผber zahlreiche Eigenschaften und Methoden, die Entwicklern die einfache und effiziente Arbeit mit Arrays ermรถglichen. Den Wert einer Eigenschaft erhalten Sie mit `arrayname.property`, die Ausgabe einer Methode mit `arrayname.method()`.

Member Zweck Rรผcksendungen
Lรคnge Anzahl der Elemente im Array Anzahl
umkehren() Reversedie Reihenfolge der Gegenstรคnde Das gleiche Array
Sortieren() Sortiert die Gegenstรคnde an ihrem Platz Das gleiche Array
Pop() Entfernt den letzten Eintrag Der entfernte Gegenstand
Verschiebung() Entfernt das erste Element Der entfernte Gegenstand
drรผcken() Fรผgt einen Wert als letztes Element hinzu. Die neue Lรคnge
concat() Verbindet zwei Arrays zu einem Ein neues Array

Beispiel fรผr die Lรคngeneigenschaft

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];

console.log(months.length);  // 12

Beispiel fรผr die umgekehrte Methode

console.log(months.reverse());
// ["Dec","Nov","Oct","Sept","Aug","July","June","May","April","March","Feb","Jan"]

Beispiel fรผr Sortiermethode

console.log(months.sort());
// ["April","Aug","Dec","Feb","Jan","July","June","March","May","Nov","Oct","Sept"]

Beispiel fรผr die Pop-Methode

console.log(months.pop()); // Dec

Beispiel fรผr die Shift-Methode

console.log(months.shift()); // Jan

Beispiel fรผr Push-Methode

let years: Array<number> = [2015, 2016, 2017, 2018, 2019];
console.log(years.push(2020)); // 6, the new length
years.forEach(function(yrs, i) {
  console.log(yrs); // 2015, 2016, 2017, 2018, 2019, 2020
});

Beispiel fรผr die Concat-Methode

let array1: Array<number> = [10, 20, 30];
let array2: Array<number> = [100, 200, 300];
console.log(array1.concat(array2)); // [10, 20, 30, 100, 200, 300]

Klasse in TypeScript

TypeScript ist eine Obermenge von JavaSkript, also alles, was mรถglich ist in JavaScript ist auch mรถglich in TypeScriptDie Klasse ist ein Feature, das ab ES6 hinzugefรผgt wurde. JavaSkript- und klassenรคhnliche Funktionalitรคt wurde durch die Verwendung einer Funktion mit Prototypmethoden zur Code-Wiederverwendung erreicht. Durch die Verwendung von Klassen kann Ihr Code Sprachen wie beispielsweise โ€ฆ รคhneln. Java, C# und Python, wo Code leicht wiederverwendet werden kann.

Definieren einer Klasse in TypeScript

Hier ist die grundlegende Klassensyntax in TypeScript:

class nameofclass {
     //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class
}

Beispiel: Ein funktionierendes Beispiel fรผr Class

class Students {
    age : number;
    name : string;
    roll_no : number;

    constructor(age: number, name:string, roll_no: number) {
        this.age = age;
        this.name = name;
        this.roll_no = roll_no;
    }

    getRollNo(): number {
        return this.roll_no;
    }

    getName() : string {
        return this.name;
    }

    getAge() : number {
        return this.age;
    }
}

Im obigen Beispiel haben Sie eine Klasse namens Students. Sie hat die Eigenschaften age, name und roll_no.

Konstrukteur in einem TypeScript Klasse

Die oben definierte Klasse Students hat einen Konstruktor, wie unten dargestellt:

constructor(age: number, name:string, roll_no: number) {
        this.age = age;
        this.name = name;
        this.roll_no = roll_no;
    }

Die Konstruktormethode hat die Parameter Alter, Name und Matrikelnummer. Der Konstruktor initialisiert die Eigenschaften bei der Instanziierung der Klasse. Auf die Eigenschaften wird รผber die Methode zugegriffen. fehlen uns die Worte. Schlรผsselwรถrter, zum Beispiel `this.age` fรผr den Zugriff auf das Alter und `this.roll_no` fรผr den Zugriff auf die Rollennummer. Sie kรถnnen auch einen Standardkonstruktor verwenden, wie unten gezeigt:

constructor () {}

Methoden innerhalb eines TypeScript Klasse

In der Klasse Students sind Methoden definiert, zum Beispiel getRollNo(), getName() und getAge(), die die Werte der Eigenschaften roll_no, name und age zurรผckgeben.

getRollNo(): number {
        return this.roll_no;
}

getName() : string {
	return this.name;
}

getAge() : number {
	return this.age;
}

Erstellen einer Instanz einer Klasse in TypeScript

In TypeScriptUm eine Instanz einer Klasse zu erstellen, verwendet man den Operator `new`. Wenn Sie mit `new` eine Instanz erstellen, erhalten Sie ein Objekt, das auf die Eigenschaften und Methoden der Klasse zugreifen kann, wie unten gezeigt:

let student_details = new Students(15, "Harry John", 33);
student_details.getAge();  // 15
student_details.getName(); // Harry John

Zusammenstellen eines TypeScript Klasse bis JavaSkript

Sie kรถnnen den unten gezeigten tsc-Befehl verwenden, um zu kompilieren. JavaSkript.

Command: tsc  Students.ts

Die Ausgabe der JavaDer Skriptcode nach der Kompilierung sieht wie folgt aus:

var Students = /** @class */ (function () {
    function Students(age, name, roll_no) {
        this.age = age;
        this.name = name;
        this.roll_no = roll_no;
    }
    Students.prototype.getRollNo = function () {
        return this.roll_no;
    };
    Students.prototype.getName = function () {
        return this.name;
    };
    Students.prototype.getAge = function () {
        return this.age;
    };
    return Students;
}());

In JavaIm Skript wird die Klasse in eine selbstaufrufende Funktion umgewandelt.

Klassenvererbung

Klassen kรถnnen mit vererbt werden erweitert Schlรผsselwort in TypeScript.

Syntax der Klassenvererbung:

class A {
     //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class

}

class B extends A {
 //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class

}

Klasse B wird teilen kรถnnen Klasse A Methoden und Eigenschaften.

Hier ist ein funktionierendes Beispiel einer Klasse, die Vererbung verwendet:

class Person {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    getName(): string {
        return this.name;
    }

    getAge(): number {
        return this.age;
    }
}

class Student extends Person {
    tmarks: number;
    getMarks(): number {
        return this.tmarks;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24);
_std1.getAge();      // output is 24
_std1.setMarks(500);
_std1.getMarks();    // output is 500

Sie haben zwei Klassen, Person und Student. Student erweitert Person, und das von Student erstellte Objekt kann sowohl auf seine eigenen Methoden und Eigenschaften als auch auf die der Klasse, von der es erweitert wird, zugreifen.

Nun fรผgen wir der obigen Klasse einige ร„nderungen hinzu.

Ejemplo:

class Person {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    getName(): string {
        return this.name;
    }

    getAge(): number {
        return this.age;
    }
}

class Student extends Person {
    tmarks: number;
    constructor(name: string, age: number, tmarks: number) {
        super(name, age);
        this.tmarks = tmarks; // the derived property must be assigned too
    }
    getMarks(): number {
        return this.tmarks;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24, 500);
_std1.getAge();   // output is 24
_std1.getMarks(); // output is 500

Die ร„nderung gegenรผber dem vorherigen Beispiel besteht in einem in der Klasse Student definierten Konstruktor. Dieser Konstruktor akzeptiert dieselben Parameter wie die Basisklasse sowie gegebenenfalls eigene zusรคtzliche Parameter.

In TypeScript Sie mรผssen `super` mit allen Parametern der Basisklasse aufrufen. Dies muss die erste Anweisung im Konstruktor sein, da `super` den Konstruktor der abgeleiteten Klasse ausfรผhrt. Jede von der abgeleiteten Klasse deklarierte Eigenschaft, wie z. B. `tmarks`, muss anschlieรŸend explizit zugewiesen werden, da `getMarks` sonst `undefined` zurรผckgibt.

Zugriffsmodifikatoren in TypeScript

TypeScript Unterstรผtzt die Zugriffsmodifizierer public, private und protected fรผr Ihre Methoden und Eigenschaften. StandardmรครŸig gilt die Methode oder Eigenschaft als รถffentlich, wenn kein Zugriffsmodifizierer angegeben ist, und ist somit vom Objekt der Klasse aus leicht zugรคnglich.

Bei privaten Zugriffsmodifizierern sind die Member nicht fรผr das Objekt der Klasse verfรผgbar und dรผrfen nur innerhalb der Klasse verwendet werden. Sie stehen einer abgeleiteten Klasse nicht zur Verfรผgung.

Bei geschรผtzten Zugriffsmodifikatoren sind die Member nur innerhalb der Klasse und der abgeleiteten Klasse nutzbar und nicht vom Objekt der Klasse aus zugรคnglich.

Ejemplo:

class Person {
    protected name: string;
    protected age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    private getName(): string {
        return this.name;
    }

    getDetails(): string {
        return "Name is " + this.getName();
    }
}

class Student extends Person {
    tmarks: number;
    constructor(name: string, age: number, tmarks: number) {
        super(name, age);
        this.tmarks = tmarks;
    }
    getMarks(): number {
        return this.tmarks;
    }

    getFullName(): string {
        return this.name;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24, 500);
_std1.getMarks();    // output is 500
_std1.getFullName(); // output is Sheena
_std1.getDetails();  // output is Name is Sheena
Verรคnderung Selbe Klasse Abgeleitete Klasse Objekt der Klasse
ร–ffentlichkeit Ja Ja Ja
geschรผtzt Ja Ja Nein
privat Ja Nein Nein

Schnittstelle in TypeScript

Eine der Kernfunktionen von TypeScript Schnittstellen sind ein Regelwerk, das von der Entitรคt, die sie implementiert, befolgt werden muss. Die Entitรคt kann eine Klasse, Funktion oder Variable sein. Eine Schnittstelle besteht aus Eigenschaften und Methoden. Eigenschaften und Methoden kรถnnen mit der Syntax โ€ž?โ€œ als optional gekennzeichnet werden. Die Schnittstelle fรผhrt zu einer strengen Typรผberprรผfung fรผr alle Funktionen, Variablen und Klassen, die sie implementieren.

Syntax einer Schnittstelle in TypeScript

interface Dimension {
    width: string;
    height: string;
}

Sie haben eine Schnittstelle namens Dimension definiert, die die Eigenschaften Breite und Hรถhe besitzt, die beide vom Typ String sind.

Dieses Interface kann nun durch eine Variable, eine Funktion oder eine Klasse implementiert werden. Hier ist ein Beispiel fรผr eine Variable, die das Interface Dimension implementiert.

Ejemplo:

interface Dimension {
    width: string;
    height: string;
}

let _imagedim: Dimension = {
    width: "100px",
    height: "200px"
};

Die Signatur der Schnittstelle Dimension enthรคlt Breite und Hรถhe, die beide obligatorisch sind. Fehlt eine Eigenschaft oder wird ein Typ geรคndert, fรผhrt dies zu einem Kompilierfehler. JavaSkript.

Der obige Code, wenn kompiliert zu JavaDas Skript sieht wie folgt aus:

var _imagedim = {
    width: "100px",
    height: "200px"
};

Sehen wir uns nun an, wie man eine Schnittstelle mit einer Funktion verwendet.

Verwendung einer Schnittstelle als Rรผckgabetyp einer Funktion

interface Dimension {
    width: string;
    height: string;
}

function getDimension() : Dimension {
    let width = "300px";
    let height = "250px";
    return {
        width: width,
        height: height
    }
}

Im obigen Beispiel wird das Interface Dimension als Rรผckgabetyp der Funktion getDimension() verwendet. Der Rรผckgabewert muss den im Interface deklarierten Eigenschaften und Typen entsprechen.

Die zusammengestellt JavaDer Skriptcode lautet wie folgt:

function getDimension() {
    var width = "300px";
    var height = "250px";
    return {
        width: width,
        height: height
    };
}

Wenn der Rรผckgabetyp wรคhrend der Kompilierung nicht mit der Schnittstelle รผbereinstimmt, wird ein Fehler ausgelรถst.

Schnittstelle als Funktionsparameter

interface Dimension {
    width: string;
    height: string;
}

function getDimension(dim: Dimension) : string {
    let finaldim  = dim.width + "-" + dim.height;
    return finaldim;
}

getDimension({width:"300px", height:"250px"}); // "300px-250px"

Im obigen Beispiel haben Sie das Interface `Dimension` als Parameter fรผr die Funktion `getDimension()` verwendet. Beim Aufruf der Funktion muss der รผbergebene Parameter den vom Interface definierten Regeln entsprechen.

Die zusammengestellt JavaDer Skriptcode lautet wie folgt:

function getDimension(dim) {
    var finaldim = dim.width + "-" + dim.height;
    return finaldim;
}
getDimension({ width: "300px", height: "250px" });

Klasse, die eine Schnittstelle implementiert

Um eine Schnittstelle mit einer Klasse zu nutzen, mรผssen Sie das Schlรผsselwort verwenden. implementiert.

Syntax fรผr eine Klasse, die ein Interface implementiert:

class NameofClass implements InterfaceName {
}

Das folgende Beispiel zeigt eine Schnittstelle, die mit einer Klasse interagiert.

interface Dimension {
    width : string,
    height: string,
    getWidth(): string;
}

class Shapes implements Dimension {
    width: string;
    height: string;
    constructor (width:string, height:string) {
        this.width = width;
        this.height = height;
    }
    getWidth() {
        return this.width;
    }
}

Im obigen Beispiel haben Sie das Interface Dimension mit den Eigenschaften width und height, beide vom Typ string, und einer Methode namens getWidth() definiert, die einen String zurรผckgibt.

Die zusammengestellt JavaDer Skriptcode lautet wie folgt:

var Shapes = /** @class */ (function () {
    function Shapes(width, height) {
        this.width = width;
        this.height = height;
    }
    Shapes.prototype.getWidth = function () {
        return this.width;
    };
    return Shapes;
}());

Funktionen in TypeScript

Funktionen sind Abfolgen von Anweisungen, die zur Ausfรผhrung einer Aufgabe ausgefรผhrt werden. JavaIm Skript ist der grรถรŸte Teil des Codes in Form von Funktionen geschrieben, und diese spielen eine wichtige Rolle. TypeScript Es stehen zwar Klassen, Schnittstellen, Module und Namensrรคume zur Verfรผgung, aber Funktionen spielen weiterhin eine wichtige Rolle. Der Unterschied zwischen einer Funktion in JavaDrehbuch und TypeScript sind die Parameter- und Rรผckgabetypen, die mit einem verfรผgbar sind TypeScript Funktion.

JavaSkriptfunktion:

function add (a1, b1) {
   return a1+b1;
}

TypeScript Funktion:

function  add(a1 : number, b1: number) : number {
    return a1 + b1;
}

In der obigen Funktion lautet der Name der Funktion โ€žaddโ€œ, die Parameter sind a1 und b1Beide Parameter sind vom Typ Zahl, und auch der Rรผckgabetyp ist eine Zahl. Wenn Sie der Funktion einen String รผbergeben, wird beim Kompilieren ein Kompilierfehler ausgelรถst. JavaSkript.

Aufruf der Funktion: add

let x = add(5, 10);   // will return 15
let b = add(5);       // error TS2554: Expected 2 arguments, but got 1
let c = add(3,4,5);   // error TS2554: Expected 2 arguments, but got 3
let t = add("Harry", "John");
// error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'

Die Parameter a1 und b1 Diese Angaben sind obligatorisch und fรผhren zu einem Fehler, wenn sie fehlen. Parametertypen und Rรผckgabetyp sind gleichermaรŸen wichtig und kรถnnen nach ihrer Definition nicht mehr geรคndert werden.

Optionale Parameter fรผr eine Funktion

In JavaIm Skript sind alle Funktionsparameter optional und gelten als undefiniert, wenn sie nicht รผbergeben werden. Dasselbe gilt nicht in TypeScriptSobald Sie die Parameter definiert haben, mรผssen Sie diese angeben. Wenn ein Parameter optional sein soll, fรผgen Sie ein Fragezeichen hinter dem Parameternamen hinzu, wie unten gezeigt:

function getName(firstname: string, lastname?: string): string {
    return firstname + lastname;
}

let a = getName("John");              // returns Johnundefined
let b = getName("John", "Harry");     // returns JohnHarry
let c = getName("John", "H", "Harry"); // error TS2554: Expected 1-2 arguments, but got 3

Bitte beachten Sie, dass optionale Parameter zuletzt definiert werden mรผssen. Es ist nicht mรถglich, den ersten Parameter optional und den zweiten obligatorisch zu definieren, da der Compiler sonst nicht weiรŸ, welcher Wert angegeben wurde.

Weisen Sie den Parametern Standardwerte zu

Sie kรถnnen den Parametern Standardwerte zuweisen, wie unten dargestellt:

function getName(firstname: string, lastname = "Harry"): string {
    return firstname + lastname;
}

let a = getName("John");      // will return JohnHarry
let b = getName("John", "H"); // will return JohnH

ร„hnlich wie optionale Parameter mรผssen auch standardmรครŸig initialisierte Parameter am Ende der Parameterliste stehen.

Ruheparameter

Sie haben gesehen, wie TypeScript Es werden obligatorische, optionale und Standardwertparameter behandelt. Nun betrachten wir die Restparameter. Restparameter sind eine Gruppe optionaler Parameter, die gemeinsam definiert werden, mithilfe von drei Parametern. Punkte (โ€ฆ) gefolgt vom Namen des Parameters, der ein Array ist.

Syntax fรผr Rest-Parameter:

function testFunc(a: string, ...arr: string[]) :string {
    return a + arr.join("");
}

Wie oben gezeigt, ist der Restparameter ein Array, dem drei Punkte vorangestellt sind. Das Array enthรคlt alle รผbrigen Argumente, die an die Funktion รผbergeben werden.

Ejemplo:

let a = testFunc("Monday", "Tuesday", "Wednesday", "Thursday");
// output is MondayTuesdayWednesdayThursday

Pfeilfunktionen

Eine Pfeilfunktion ist eine der wichtigen Funktionen, die in ES6 verรถffentlicht wurden, und ist verfรผgbar in TypeScript Auch. Die Syntax enthรคlt einen dicken Pfeil, daher der Name.

Syntax der Pfeilfunktion:

var nameoffunction = (params) => {
 // code here
}

Wozu dient eine Pfeilfunktion?

Um den Anwendungsfall einer Pfeilfunktion zu verstehen, betrachten wir ein Beispiel.

Ejemplo:

var ScoreCard = function () {
    this.score = 0;

    this.getScore = function () {
        setTimeout(function () {
            console.log(this.score);    // gives undefined
        }, 1000);
    }
}

var a = new ScoreCard();
a.getScore();

Sie haben eine Funktion mit einer Eigenschaft `score` erstellt, die mit 0 initialisiert ist, und eine Methode `getScore`, die intern `setTimeout` verwendet und nach einer Sekunde `this.score` protokolliert. Der protokollierte Wert ist `undefined`, obwohl `this.score` definiert und initialisiert ist. Das Problem liegt in der fehlen uns die Worte. Das Schlรผsselwort. Die Funktion innerhalb von setTimeout hat ihr eigenes this, und da score darin nicht definiert ist, ist das Ergebnis undefiniert.

Dasselbe lรคsst sich mit einer Pfeilfunktion realisieren, wie unten gezeigt:

var ScoreCard = function () {
    this.score = 0;

    this.getScore = function () {
        setTimeout(() => {
            console.log(this.score);   // you get 0
        }, 1000);
    }
}

var a = new ScoreCard();
a.getScore();

Eine Pfeilfunktion hat keine eigene fehlen uns die Worte.Stattdessen wird die Variable aus dem รผbergeordneten Gรผltigkeitsbereich verwendet, sodass auรŸerhalb deklarierte Variablen innerhalb einer Pfeilfunktion mit `this` zugรคnglich sind. Pfeilfunktionen sind aufgrund ihrer kรผrzeren Syntax sowie fรผr Rรผckruffunktionen, Ereignisbehandler und Timing-Funktionen nรผtzlich.

TypeScript Enums

A TypeScript Ein Enum ist ein Objekt, das eine Sammlung zusammengehรถriger Werte enthรคlt, die gemeinsam gespeichert sind. JavaScript unterstรผtzt Enums nicht nativ. Die meisten Programmiersprachen wie z. B. Java, C und C++ Unterstรผtzung von Enumerationen und TypeScript Dadurch werden sie auch verfรผgbar. Aufzรคhlungen werden mit dem Schlรผsselwort enum definiert.

Wie deklariere ich eine Enum?

Syntax:

enum NameofEnum {
   value1,
   value2,
    ..
}

Beispiel: Enum

enum Directions {
    North,
    South,
    East,
    West
}

Im obigen Beispiel haben Sie ein Enum namens Directions mit den Werten North, South, East und West definiert. Die Werte sind ab 0 fรผr den ersten Eintrag nummeriert und werden fรผr jeden weiteren Eintrag um 1 erhรถht.

Deklarieren Sie einen Enum mit einem numerischen Wert

StandardmรครŸig wird, wenn einem Enum-Element kein Wert zugewiesen wird, eine Zahl ab 0 angenommen. Das folgende Beispiel zeigt ein Enum mit expliziten numerischen Werten.

enum Directions {
North = 0,
South = 1,
East = 2,
West = 3
}

Sie kรถnnen auch einen Startwert zuweisen, woraufhin die nachfolgenden Elemente inkrementierte Werte erhalten. Zum Beispiel:

enum Directions {
North = 5,
South, // will be 6
East,  // 7
West   // 8
}

Norden beginnt bei 5, Sรผden ist 6, Osten ist 7 und Westen ist 8.

Sie kรถnnen anstelle der Standardwerte auch eigene Werte zuweisen. Zum Beispiel:

enum Directions {
North = 5,
South = 4,
East = 6,
West = 8
}

Wie greife ich auf eine Enum zu?

Das folgende Beispiel zeigt, wie man ein Enum in seinem Code verwendet:

enum Directions {
    North,
    South,
    East,
    West
}

console.log(Directions.North);      // output is 0
console.log(Directions["North"]); // output is 0
console.log(Directions[0]);       // output is North

Die zusammengestellt JavaDas Skript lautet wie folgt:

var Directions;
(function (Directions) {
    Directions[Directions["North"] = 0] = "North";
    Directions[Directions["South"] = 1] = "South";
    Directions[Directions["East"] = 2] = "East";
    Directions[Directions["West"] = 3] = "West";
})(Directions || (Directions = {}));
console.log(Directions.North);
console.log(Directions["North"]);
console.log(Directions[0]);

Da JavaDas Skript unterstรผtzt keine Enumerationen; der Compiler wandelt die Enumeration in eine selbstaufrufende Funktion um, wie oben gezeigt. Die doppelte Zuweisung erzeugt die umgekehrte Zuordnung.ping Von der Nummer zurรผck zum Namen.

Deklarieren Sie ein Enum mit einem String-Wert

Sie kรถnnen beliebige Zeichenkettenwerte zuweisen, wie im folgenden Beispiel gezeigt.

Ejemplo:

enum Directions {
    North = "N",
    South = "S",
    East = "E",
    West = "W"
}

console.log(Directions.North);      // output is N
console.log(Directions["North"]); // output is N
console.log(Directions[0]);       // output is undefined

Die zusammengestellt JavaDas Skript lautet wie folgt:

var Directions;
(function (Directions) {
    Directions["North"] = "N";
    Directions["South"] = "S";
    Directions["East"] = "E";
    Directions["West"] = "W";
})(Directions || (Directions = {}));
console.log(Directions.North);
console.log(Directions["North"]);
console.log(Directions[0]);

โš ๏ธ Warnung: String-Enums haben keine umgekehrte ZuordnungpingVergleichen Sie die beiden oben kompilierten Ausgaben: Die numerische Aufzรคhlung speichert beide Richtungen, wรคhrend die Zeichenkettenaufzรคhlung nur die Zuordnung von Name zu Wert speichert. Deshalb Directions[0] Gibt fรผr einen String-Enum โ€žundefinedโ€œ zurรผck.

Was sind die Module in TypeScript?

Dateien erstellt in TypeScript Globale Variablen haben Zugriff auf Variablen, die in einer Datei deklariert sind und somit auch in anderen Dateien verwendet werden kรถnnen. Diese globale Natur kann zu Codekonflikten und Laufzeitproblemen fรผhren. Mithilfe der Export- und Importfunktionen von Modulen lassen sich Konflikte mit globalen Variablen und Funktionen vermeiden. Diese Funktion wurde in [Version einfรผgen] eingefรผhrt. JavaDas Skript ist mit der ES6-Version kompatibel und wird auch unterstรผtzt in TypeScript.

Warum brauchen Sie Module in TypeScript?

Das folgende Beispiel zeigt das Problem ohne Module.

Beispiel test1.ts

let age : number = 25;

Sie haben in test1.ts eine Variable โ€žAlterโ€œ vom Typ โ€žNummerโ€œ definiert.

Beispiel test2.ts

In test2.ts kรถnnen Sie auf die Variable zugreifen. Alter Die in test1.ts definierte Datei muss wie folgt modifiziert werden:

age = 30; // changed from 25 to 30.
let _new_age = age;

Dies kann viele Probleme verursachen, da die Variablen global verfรผgbar sind und von รผberall aus verรคndert werden kรถnnen.

Mit ModuleDer geschriebene Code bleibt lokal in der Datei und kann nicht von auรŸerhalb abgerufen werden. Um Elemente einer Datei freizugeben, muss diese mit dem Schlรผsselwort `export` exportiert werden. Export wird verwendet, wenn Sie mรถchten, dass eine Variable, Klasse, Funktion oder Schnittstelle in einer anderen Datei verwendet wird. Import Diese Methode wird verwendet, wenn Sie auf ein exportiertes Element zugreifen mรถchten. Dadurch bleibt der Code innerhalb der Datei intakt, und selbst wenn Sie dieselben Variablennamen definieren, werden diese nicht vermischt.

Verwenden von Export und Import

Es gibt viele Mรถglichkeiten zum Exportieren und Importieren. Wir werden die gebrรคuchlichste Syntax besprechen.

Die Syntax fรผr Import und Export 1:

export  nameofthevariable or class name or interface name etc

//To import the above variable or class name or interface you have to use import as shown below:

import {nameofthevariable or class name or interfacename} from "file path here without .ts"

Hier ist ein funktionierendes Beispiel fรผr die Verwendung von Export und Import.

test1.ts

export let age: number = 25;

Das Schlรผsselwort โ€žexportโ€œ wird verwendet, um die Variable โ€žageโ€œ mit einer anderen Datei zu teilen.

test2.ts

import { age } from "./test1"
let new_age :number = age;

Das Schlรผsselwort โ€žimportโ€œ wird verwendet, um auf die Alter Variable, und Sie mรผssen den Dateispeicherort wie oben gezeigt angeben.

Syntax fรผr Import und Export 2:

Es gibt noch eine weitere Mรถglichkeit zum Exportieren und Importieren, und die Syntax ist wie folgt:

export = classname;

import classname = require("file path of modulename")

Wenn Sie verwenden exportieren = Um Ihr Modul zu exportieren, muss der Import require(โ€œDateipfad des Modulnamensโ€) verwenden.

Hier ist ein praktisches Beispiel, das diesen Fall veranschaulicht.

Kunde.ts

class Customer {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    getName(): string {
        return this.name;
    }
}

export = Customer;

testCustomer.ts

import Customer = require("./Customer");

let a = new Customer("Harry", 30);
alert(a.getName());

Modullader

Module kรถnnen nicht eigenstรคndig funktionieren, daher benรถtigen Sie einen Modullader, um die Importabhรคngigkeiten zu finden, wie im folgenden Beispiel zu sehen ist: TypeScript Beispiele siehe oben. Als Modullader stehen CommonJS fรผr Node.js und Require.js zur Ausfรผhrung im Browser zur Verfรผgung.

Um Code im CommonJS-Modulformat zu kompilieren, verwenden Sie folgenden Befehl:

tsc --module commonjs testCustomer.ts

Um Code im Requirejs-Modulformat zu kompilieren, verwenden Sie folgenden Befehl:

tsc --module amd testCustomer.ts

Die abhรคngigen Dateien werden mit dem oben genannten Befehl in JS-Dateien konvertiert.

Beispiel: testCustomer.ts wird mithilfe von RequireJS zu testCustomer.js.

define(["require", "exports", "./Customer"], function (require, exports, Customer) {
    "use strict";
    exports.__esModule = true;
    var a = new Customer("Harry", 30);
    alert(a.getName());
});

Beispiel: Konvertierung von Customer.ts zu Customer.js mit RequireJS

define(["require", "exports"], function (require, exports) {
    "use strict";
    var Customer = /** @class */ (function () {
        function Customer(name, age) {
            this.name = name;
            this.age = age;
        }
        Customer.prototype.getName = function () {
            return this.name;
        };
        return Customer;
    }());
    return Customer;
});

Um es mit require.js zu testen, mรผssen Sie eine Datei namens main.js erstellen, die die Abhรคngigkeiten wie gezeigt referenziert.

Hier ist die Ordnerstruktur:

src/
    Customer.js
    testCustomer.js
    main.js
    require.js  // you can get this file from github or npm install requirejs
    test.html

Main.js

define(function (require) {
    var customer = require("./Customer");
    var testCustomer = require("./testCustomer");
});

test.html

<!DOCTYPE html>
<html>
<head>
    <title>TypeScript Module testing using Requirejs</title>
    <script data-main="main" src="require.js"></script>
</head>
<body>
    <h3>Testing modules using Requirejs</h3>
</body>
</html>

Modullader

Namespaces in TypeScript

Ein Namensraum fasst eine Sammlung von Klassen, Schnittstellen, Variablen und Funktionen in einer einzigen Datei zusammen.

Namespace-Syntax

namespace name{

export class {
}

export interface {
}

export const constname;

}

Der zugehรถrige Code ist unter einem Namespace verfรผgbar.

Arbeitsbeispiel fรผr einen Namespace: testnamespace.ts

namespace StudentSetup {

    export interface StudDetails {
        name: string;
        age: number;
    }

    export function addSpace(str) { // will add space to the string given
        return str.split("").join(" ");
    }

    export class Student implements StudDetails {
        name: string;
        age: number;

        constructor(studentdetails: StudDetails) {
            this.name = studentdetails.name;
            this.age = studentdetails.age;
        }

        getName(): string {
            return this.name;
        }
    }
}

Der Name des Namespace ist StudenteneinrichtungSie haben auรŸerdem eine Schnittstelle StudDetails, eine Funktion addSpace und eine Klasse namens Student hinzugefรผgt.

Zugriff auf einen Namensraum

Im Folgenden finden Sie den Code, in dem Sie den Namespace verwenden. Studenteneinrichtung.

testStudentSetup.ts

let a = new StudentSetup.Student({ name: "Harry", age: 20 });

console.log("The name is :" + StudentSetup.addSpace(a.getName()));

Auf Klassen, Schnittstellen oder Funktionen innerhalb eines Namensraums muss รผber den Namensraumnamen verwiesen werden, zum Beispiel: StudentSetup.addSpace um auf die Funktion zuzugreifen und StudentSetup.Student um auf die Klasse zuzugreifen.

Sie kรถnnen beide Dateien wie unten gezeigt zu einer einzigen JS-Datei kompilieren:

tsc --outFile namespace.js testnamespace.ts  testStudentSetup.ts

รœberprรผfen Sie die Ausgabe in der Eingabeaufforderung mit dem folgenden Befehl:

node namespace.js

Ausgang:

The name is :H a r r y

Umgebungsdeklarationen in TypeScript

TypeScript ermรถglicht die Nutzung von Drittanbietern JavaSkriptdateien, die Umgebungsdeklarationen verwenden. Der Vorteil dieser Funktion besteht darin, dass Sie die Bibliothek nicht neu schreiben mรผssen und dennoch alle ihre Funktionen mit Typรผberprรผfung nutzen kรถnnen. TypeScript.

Ambient-Syntax

So deklarieren Sie ein Umgebungsmodul:

declare module moduleName {
   //code here
}

Die Umgebungsdatei muss wie folgt gespeichert werden:

filename.d.ts

Um die Datei zu verwenden Dateiname.d.ts In Ihrer .ts-Datei mรผssen Sie darauf wie folgt verweisen:

/// <reference path="filename.d.ts"/>

Die Ambient-Typdeklaration in TypeScript verweist auf die Drittanbieterbibliothek und deklariert die benรถtigten Funktionen mit ihren eigenen Datentypen neu. Betrachten wir beispielsweise die kleine JavaDie Skriptbibliothek ist unten dargestellt.

Third Party JavaSkriptdatei: testString.js

var StringChecks = {
    isString: function (str) {
        return typeof str === "string";
    },

    convertToUpperCase: function (str) {
        return str.toUpperCase();
    },

    convertToLowerCase: function (str) {
        return str.toLowerCase();
    },

    convertToStringBold: function (str) {
        return str.bold();
    }
};

Sie haben ein Objekt namens StringChecks, das die Funktionen isString, convertToUpperCase, convertToLowerCase und convertToStringBold besitzt.

Erstellen eines Ambient-Moduls in TypeScript

Nun erstellen wir ein Umgebungsmodul, das auf Folgendes verweist: JavaDas Skript fรผhrt die oben genannten Funktionen aus und fรผgt bei Bedarf Typรผberprรผfungen hinzu.

Dateiname: tstring.d.ts

declare module TestString {

    export interface StringsFunc {
        isString(str: string): boolean;
        convertToUpperCase(str: string): string;
        convertToLowerCase(str: string): string;
        convertToStringBold(str: string): string;
    }
}

declare var StringChecks: TestString.StringsFunc;

Sie definieren ein Modul namens TestString und exportieren die Schnittstelle StringsFunc. Jede Signatur gibt an, was die Funktion akzeptiert und zurรผckgibt:

  • isString(str: string): boolean Die Funktion nimmt eine Zeichenkette entgegen und gibt einen booleschen Wert zurรผck. Die รœbergabe einer Zahl oder eines anderen Datentyps fรผhrt zu einem Kompilierfehler.
  • convertToUpperCase(str: string): string โ€“ nimmt eine Zeichenkette entgegen und gibt eine Zeichenkette zurรผck.
  • convertToLowerCase(str: string): string โ€“ nimmt eine Zeichenkette entgegen und gibt eine Zeichenkette zurรผck.
  • konvertierenToStringBold(str: string): string โ€“ nimmt eine Zeichenkette entgegen und gibt eine Zeichenkette zurรผck.

Da der JavaDie Skriptdatei stellt den Objektnamen StringChecks bereit, wir verweisen schlieรŸlich in der .d.ts-Datei auf denselben Namen:

declare var StringChecks: TestString.StringsFunc;

Verwendung eines Ambient-Moduls in TypeScript

Hier ist die Datei test.ts, die die Umgebungsdatei tstring.d.ts verwendet.

/// <reference path="tstring.d.ts"/>
let str1 = StringChecks.isString("Hello World");
console.log(str1);
let str2 = StringChecks.convertToUpperCase("hello world");
console.log(str2);
let str3 = StringChecks.convertToLowerCase("HELLO");
console.log(str3);
let str4 = StringChecks.convertToStringBold("Hello World");
console.log(str4);

Kompilieren Sie mit tsc test.ts, um test.js zu erzeugen:

/// <reference path="tstring.d.ts"/>
var str1 = StringChecks.isString("Hello World");
console.log(str1);
var str2 = StringChecks.convertToUpperCase("hello world");
console.log(str2);
var str3 = StringChecks.convertToLowerCase("HELLO");
console.log(str3);
var str4 = StringChecks.convertToStringBold("Hello World");
console.log(str4);

Sie kรถnnen nun test.js in einer HTML-Datei zusammen mit der Bibliotheksdatei testString.js verwenden.

<html>
<head>
    <title>Test TypeScript Ambient</title>
    <script src="testString.js"></script>
    <script src="test.js"></script>
</head>
<body>
</body>
</html>

Ausgang:

true
HELLO WORLD
hello
<b>Hello World</b>

๐Ÿ’ก Tipp: Bei gรคngigen Bibliotheken mรผssen Sie selten selbst eine .d.ts-Datei schreiben. Installieren Sie stattdessen die von der Community gepflegten Typen, zum Beispiel npm install --save-dev @types/lodashund der Compiler erkennt sie automatisch.

Um fortzufahren, vergleichen Sie die beiden Sprachen direkt in TypeScript vs JavaSkript, erneut besuchen JavaSkript-Array-Methoden fรผr die hier verwendeten nicht typisierten ร„quivalente und studieren Schleifen in JavaSkript und intern und extern JavaSkript fรผr die Browsergrundlagen, auf denen die kompilierte Ausgabe beruht.

Hรคufig gestellte Fragen

Nein. Ein Browser fรผhrt Folgendes aus: JavaDa es sich um ein reines Skript handelt, muss die .ts-Datei zuerst mit tsc oder einem Bundler kompiliert werden. Typannotationen werden dabei gelรถscht und verursachen keine Laufzeitkosten.

Ja. Aktivieren Sie allowJs in der tsconfig.json und benennen Sie die Dateien einzeln um. Denn jede JavaDie Skriptdatei ist bereits gรผltig. TypeScriptDas Projekt wird wรคhrend der gesamten Migration weiterhin kompiliert.

Eine Schnittstelle kann wieder geรถffnet und erweitert werden und ist die รผbliche Wahl fรผr Objektformen. Ein Typalias umfasst auch Vereinigungen, Tupel und primitive Datentypen, die durch Schnittstellen nicht ausgedrรผckt werden kรถnnen.

Verwenden Sie Module mit Export und Import. Namensrรคume existieren seit vor ES-Modulen und sind hauptsรคchlich fรผr Deklarationsdateien und รคltere skriptbasierte Codebasen weiterhin nรผtzlich.

Ja, messbar. Der Compiler weist halluzinierte Eigenschaften und falsche Argumenttypen sofort zurรผck, sodass ein generierter Code-Ausschnitt entweder eine Typรผberprรผfung durchfรผhrt oder genau meldet, wo der Fehler liegt.

Die Editorintegrationen speisen die umgebenden Typen und .d.ts-Dateien in den Modellkontext ein. Ausfรผhrlichere Annotationen fรผhren daher zu genaueren Vervollstรคndigungen als lose typisierter Code.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: