Lektionen des Moduls (2/2)
Arrays und Tupel
In JavaScript können Arrays jeden beliebigen Elementtyp enthalten und dynamisch wachsen oder schrumpfen. TypeScript fügt eine statische Typprüfung hinzu, um sicherzustellen, dass die Kollektionen homogen bleiben oder einer festen Typstruktur entsprechen.
Arrays (Homogene Kollektionen)
In TypeScript gibt es zwei äquivalente Möglichkeiten, den Typ eines Arrays zu definieren, das Elemente desselben Typs enthält:
-
Verwenden des Elementtyps gefolgt von eckigen Klammern (
[]):TSconst numbers: number[] = [1, 2, 3]; const strings: string[] = ['a', 'b', 'c']; -
Verwenden des generischen Typs
Array<T>:TSconst numbers: Array<number> = [1, 2, 3];
Beide Schreibweisen sind vollkommen gültig, aber die erste (typ[]) ist die konventionelle und in fast allen Projekten gebräuchlichste. Wenn Sie versuchen, einen ungültigen Wert einzufügen (z. B. numbers.push("hello") in ein Array vom Typ number[]), gibt TypeScript einen Compilerfehler aus.
Tupel (Strukturen mit fester Größe)
Ein Tupel ist eine spezielle Art von Array, das eine feste Anzahl von Elementen hat und bei dem jedes Element einen vordefinierten spezifischen Typ basierend auf seiner genauen Position hat.
Wenn wir beispielsweise eine HTTP-Antwort speichern möchten, die aus einem Statuscode (Zahl) und einer Nachricht (String) besteht:
const response: [number, string] = [200, 'OK'];In diesem Fall:
- Das erste Element (
response[0]) muss einenumbersein. - Das zweite Element (
response[1]) muss einstringsein. - Das Array muss mit genau 2 Elementen initialisiert werden.
Schreibgeschützte Tupel (readonly)
Ein wichtiges Detail bei Tupeln in TypeScript ist, dass sie zur Laufzeit normale JavaScript-Arrays sind. Dies bedeutet, dass Methoden wie .push() oder .pop() technisch verfügbar sind und die Länge des Tupels verändern könnten, wodurch die Typprüfungen teilweise umgangen werden.
Um dieses Verhalten zu verhindern und echte Unveränderlichkeit zu garantieren, können wir den Modifikator readonly verwenden:
const point: readonly [number, number] = [10, 20];
// point.push(30); // Errore a tempo di compilazione!Probier es aus
Esercizio 1: Array von Zahlen
Deklariere ein Array namens scores, das nur Zahlen enthält und mit den Werten 90, 85 und 95 initialisiert ist. Verwende die explizite Typannotation für das Array. Verwende nicht den Typ any.
Hinweis anzeigen
Verwende die Syntax const scores: number[] = ... oder Array<number>.
Lösung nach 3 Versuchen verfügbar
Esercizio 2: Tupel 3D-Koordinaten
Deklariere ein Tupel namens point, das eine 3D-Koordinate (drei Zahlen für X, Y, Z) darstellt und mit den Werten 10, 20, 30 initialisiert ist. Verwende die explizite Typannotation.
Hinweis anzeigen
Der Typ des Tupels muss [number, number, number] sein.
Lösung nach 3 Versuchen verfügbar
Esercizio 3: Tupel Standortinformationen
Deklariere ein Tupel namens locationInfo, das eine geografische Koordinate mit ihrem Namen darstellt. Es muss enthalten: Breitengrad (Zahl), Längengrad (Zahl) und den Namen der Stadt (String). Initialisiere es mit den Werten 41.9028, 12.4964 und 'Rome'.
Hinweis anzeigen
Verwende die Syntax zur Definition eines Tupels mit drei Elementen: [number, number, string].
Lösung nach 3 Versuchen verfügbar
Esercizio 4: Tupel Protokollzeile
Deklariere ein Tupel namens logEntry, das eine Protokollzeile (Log-Eintrag) darstellt. Es muss der Reihe nach enthalten: einen Zeitstempel (Zahl), eine Dringlichkeitsstufe (String) und eine Fehlermeldung (String). Initialisiere es mit dem Zeitstempel 1716300000, der Stufe 'INFO' und der Nachricht 'Application started'.
Hinweis anzeigen
Verwende die Syntax zur Definition eines Tupels aus drei Elementen: [number, string, string] und weise die angegebenen Werte zu.
Lösung nach 3 Versuchen verfügbar