Lektionen des Moduls (1/2)
Bedingte Typen und infer
Bedingte Typen (Conditional Types) ermöglichen es, nicht-triviale Typentscheidungen basierend auf Vererbungsbeziehungen auszudrücken. Die Syntax ähnelt der des ternären Operators in JavaScript:
T extends U ? X : YWenn der Typ T an U zugewiesen werden kann, ist der resultierende Typ X, andernfalls Y.
Einfache bedingte Typen
Ein bedingter Typ wertet eine Bedingung statisch auf Typebene aus:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falseDieses Muster ist in Kombination mit Generics äußerst mächtig, um flexible und dynamische Hilfstypen zu erstellen.
Extraktion von Typen mit infer
Innerhalb der extends-Klausel eines bedingten Typs können wir das Schlüsselwort infer verwenden, um eine Typvariable zu deklarieren, die vom Compiler abgeleitet werden muss.
Wenn wir beispielsweise den Rückgabetyp einer Funktion extrahieren möchten:
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type FunzioneEsempio = () => string;
type Ritorno = GetReturnType<FunzioneEsempio>; // stringIn diesem Beispiel weist infer R TypeScript an, den Rückgabetyp der Funktion automatisch zu ermitteln und ihn als R im positiven Zweig der Bedingung verfügbar zu machen.
Probier es aus
Aufgabe 1: Der Typ IsString
Erstelle einen generischen Typ namens IsString<T>, der den Literaltyp true zurückgibt, wenn T von string erbt, andernfalls false.
Hinweis anzeigen
Verwende die Syntax type IsString<T> = T extends string ? true : false;, um den Typ zu überprüfen.
Lösung nach 3 Versuchen verfügbar
Aufgabe 2: Typ aus einem Array mit infer extrahieren
Definiere einen generischen Typ UnpackArray<T>, der infer verwendet, um den Typ der Elemente eines Arrays T zu extrahieren. Wenn T ein Array ist (z. B. U[]), wird U zurückgegeben, andernfalls der Typ T selbst.
Hinweis anzeigen
Verwende T extends (infer U)[] ? U : T, um die abgeleitete Typvariable U zu deklarieren und zurückzugeben.
Lösung nach 3 Versuchen verfügbar