Direkt zum Hauptinhalt springen
eLearner.app
Modul 6 · Lektion 1 von 211/14 im Kurs~15 min
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:

TS
T extends U ? X : Y

Wenn 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:

TS
type IsNumber<T> = T extends number ? true : false;

type A = IsNumber<number>; // true
type B = IsNumber<string>; // false

Dieses 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:

TS
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

type FunzioneEsempio = () => string;
type Ritorno = GetReturnType<FunzioneEsempio>; // string

In 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

Übung#ts.m6.l1.e1
Versuche: 0Wird geladen…

Erstelle einen generischen Typ namens IsString<T>, der den Literaltyp true zurückgibt, wenn T von string erbt, andernfalls false.

Editor wird geladen…
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

Übung#ts.m6.l1.e2
Versuche: 0Wird geladen…

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.

Editor wird geladen…
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