Flatten- und UnwrapPromise-Utilities
Schreiben Sie Typen, die verschachtelte generische Strukturen entpacken.
Flatten- und UnwrapPromise-Utilities ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.
Das Flatten-Problem
JavaScript-Arrays können verschachtelt sein. Ein Utility-Typ Flatten entfernt rekursiv Array-Wrapper aus einem Typ und gibt den innersten Elementtyp zurück.
type Flatten<T> = T extends (infer U)[] ? Flatten<U> : T;
type A = Flatten<number[][][]>; // number
type B = Flatten<string[]>; // stringNicht rekursives Flattening (eine Ebene)
Flattening auf einer Ebene entspricht Array.prototype.flat(1) – genau eine Verschachtelungsebene wird entfernt.
type FlatOnce<T> = T extends (infer U)[] ? U : T;
type A = FlatOnce<number[][]>; // number[]
type B = FlatOnce<string[]>; // stringRekursives Flattening
Die rekursive Variante ahmt Array.prototype.flat(Infinity) nach, indem sie rekursiv fortfährt, bis keine Array-Wrapper mehr vorhanden sind.
type Flatten<T> = T extends (infer U)[] ? Flatten<U> : T;
type C = Flatten<boolean[][][]>; // booleanUnwrapPromise: Eine Ebene
Entpacken Sie eine einzelne Promise-Ebene mithilfe von infer.
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
type D = UnwrapPromise<Promise<string>>; // string
type E = UnwrapPromise<number>; // numberTiefes UnwrapPromise
Entpacken Sie verschachtelte Promises rekursiv – dies entspricht dem integrierten Typ Awaited.
type DeepUnwrap<T> = T extends Promise<infer U> ? DeepUnwrap<U> : T;
type F = DeepUnwrap<Promise<Promise<number>>>; // numberFlatten und UnwrapPromise kombinieren
Ein kombinierter Typ verarbeitet sowohl Promises als auch Arrays und eignet sich für asynchrone Funktionen, die Arrays zurückgeben.
type Simplify<T> =
T extends Promise<infer U> ? Simplify<U>
: T extends (infer V)[] ? Simplify<V>
: T;
type G = Simplify<Promise<string[][]>>; // stringIntegriertes Awaited<T>
TypeScript 4.5+ enthält Awaited, das Thenable-Typen rekursiv entpackt, einschließlich Thenables, die keine Promises sind.
type H = Awaited<Promise<Promise<string>>>; // string
// Also handles custom thenables with .then()Map-Werte entpacken
Dasselbe infer-Muster extrahiert Werttypen aus Map.
type MapValue<T> = T extends Map<any, infer V> ? V : never;
type I = MapValue<Map<string, number[]>>; // number[]FlattenObject: Verschachtelte Interfaces zusammenführen
Ein Flattening-Typ auf Typebene führt verschachtelte Objekttypen zusammen – komplexer, aber nützlich für das tiefe Zusammenführen von Konfigurationen.
// This requires recursive mapped types + intersection spreading
// See the DeepPartial lesson for the base patternPraktischer Einsatz: API-Antworten entpacken
Entpacken Sie verschachtelte Wrapper von API-Antworten, um den Datentyp ohne manuelle Typassertionen zu erhalten.
type ApiData<T> = { data: T; status: number };
type ExtractData<T> = T extends ApiData<infer D> ? D : T;
type J = ExtractData<ApiData<User[]>>; // User[]Zusammenfassung: Flatten und Unwrap
Flatten und UnwrapPromise verwenden rekursive bedingte Typen mit infer, um Typ-Wrapper zu entfernen. Verwenden Sie Awaited zum Entpacken von Promises und schreiben Sie für andere Strukturen eine eigene Rekursion.
Schnelltest
Was gibt Flatten zurück?
Das haben Sie gelernt
Flatten und UnwrapPromise sind rekursive bedingte Typen, die generische Wrapper entfernen. Kombinieren Sie sie, um komplexe verschachtelte Typen zu vereinfachen, und verwenden Sie den integrierten Typ Awaited für Promise-Ketten.
Lerne TypeScript mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 101
- Lektionen
- 352
Häufig gestellte Fragen
Ist die Lektion „Flatten- und UnwrapPromise-Utilities“ kostenlos?
Ja — der vollständige Text von „Flatten- und UnwrapPromise-Utilities“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des TypeScript Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Flatten- und UnwrapPromise-Utilities“?
Schreiben Sie Typen, die verschachtelte generische Strukturen entpacken. Du übst TypeScript Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um TypeScript Academy zu starten?
Keine Vorkenntnisse erforderlich. TypeScript Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Flatten- und UnwrapPromise-Utilities“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser TypeScript Academy-Lektion Code schreiben und ausführen?
Ja. Jede TypeScript Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- DeepPartial und DeepReadonly
- Flatten- und UnwrapPromise-Utilities
- TupleToUnion und UnionToIntersection
- Eine Type-Utility-Bibliothek veröffentlichen