Direkt zum Hauptinhalt springen
eLearner.app
Modul 6 · Lektion 2 von 212/14 im Kurs~15 min
Lektionen des Moduls (2/2)

Gemappte Typen

Mappierte Typen (Mapped Types) ermöglichen es, neue Typen aus bestehenden Typen zu erstellen, indem Eigenschaften einzeln transformiert werden. Sie basieren auf der Syntax von Schleifen über Schlüssel unter Verwendung des Operators keyof.

TS
type Mapped<T> = {
  [P in keyof T]: T[P];
};

Dieses Beispiel ist ein mappierter Typ, der mit dem Original identisch ist: Er durchläuft jeden Schlüssel P in keyof T und weist ihm denselben Typ T[P] zu.


Modifikatoren für Mutabilität und Optionalität

Wir können Modifikatoren wie readonly und ? (Optionalität) hinzufügen oder entfernen, indem wir + (hinzufügen, Standard) oder - (entfernen) voranstellen.

Um beispielsweise die Optionalität von allen Eigenschaften eines Typs zu entfernen (sie also zu Pflichtfeldern zu machen):

TS
type Concrete<T> = {
  [P in keyof T]-?: T[P];
};

Der Modifikator -? entfernt das Optionalitäts-Flag von jeder Eigenschaft.


Neuzuordnung von Schlüsseln mit as

In TypeScript 4.1+ ist es möglich, die Schlüssel eines mappierten Typs mithilfe der as-Klausel und Template-Literal-Typen neu zuzuordnen.

TS
type ScriviSetters<T> = {
  [K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void;
};

Hier ändern wir den Namen jeder Eigenschaft K in set[GroßgeschriebenerSchlüssel] und ändern ihren Typ in eine Setter-Funktion.


Probier es aus

Aufgabe 1: Eigenschaften nullwertfähig machen

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

Deklariere einen generischen mappierten Typ Nullable<T>, der ein Objekt T nimmt und jede seiner Eigenschaften so transformiert, dass sie auch den Wert null akzeptieren kann (z. B. T[K] | null).

Editor wird geladen…
Hinweis anzeigen

Verwende die Syntax [K in keyof T]: T[K] | null; innerhalb des mappierten Typs.

Lösung nach 3 Versuchen verfügbar

Aufgabe 2: Dynamische Getters mit as generieren

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

Erstelle einen mappierten Typ namens GetterNames<T>, der die Schlüssel des Objekts T transformiert, indem er das Präfix 'get' hinzufügt und den ursprünglichen Schlüssel großschreibt (verwende Capitalize). Wenn beispielsweise ein Schlüssel name ist, wird er zu getName. Setze den Typ der Eigenschaften auf () => T[K].

Editor wird geladen…
Hinweis anzeigen

Verwende as \`get\${Capitalize<string & K>}\`, um den Schlüssel neu zuzuordnen, und () => T[K] als Rückgabetyp der Eigenschaft.

Lösung nach 3 Versuchen verfügbar