DeepPartial und DeepReadonly
Erstellen Sie rekursive Varianten von Partial und Readonly.
DeepPartial und DeepReadonly ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.
Warum tiefe Utility-Typen?
Die integrierten Typen Partial und Readonly gelten nur für eine Ebene. Für verschachtelte Objekte benötigen Sie rekursive Varianten.
interface Config {
db: { host: string; port: number };
app: { name: string };
}
type Shallow = Partial<Config>;
// Shallow.db is still required — only top level is optionalDeepPartial implementieren
Durchlaufen Sie die Objekteigenschaften rekursiv, machen Sie jede Eigenschaft optional und wenden Sie DeepPartial rekursiv an, wenn der Eigenschaftswert ein Objekt ist.
type DeepPartial<T> = T extends object
? { [K in keyof T]?: DeepPartial<T[K]> }
: T;DeepPartial in Aktion
Wenden Sie DeepPartial auf einen verschachtelten Konfigurationstyp an und beobachten Sie, wie alle Ebenen optional werden.
type PartialConfig = DeepPartial<Config>;
// PartialConfig.db?: { host?: string; port?: number }
const c: PartialConfig = { db: { host: "localhost" } };
// No error — all other fields are optionalDeepReadonly implementieren
Machen Sie jede Eigenschaft auf jeder Verschachtelungsebene readonly, indem Sie rekursiv in verschachtelte Objekttypen absteigen.
type DeepReadonly<T> = T extends object
? { readonly [K in keyof T]: DeepReadonly<T[K]> }
: T;DeepReadonly in Aktion
Eine vollständig schreibgeschützte Konfiguration kann auf keiner Ebene verändert werden.
type ReadonlyConfig = DeepReadonly<Config>;
const cfg: ReadonlyConfig = { db: { host: "localhost", port: 5432 }, app: { name: "my-app" } };
// cfg.db.port = 3000; // Error: readonlyArrays in tiefen Typen behandeln
Arrays erfordern eine besondere Behandlung – ordnen Sie Elementtypen rekursiv zu, anstatt Arrays wie einfache Objekte zu behandeln.
type DeepPartial<T> =
T extends (infer U)[]
? DeepPartial<U>[]
: T extends object
? { [K in keyof T]?: DeepPartial<T[K]> }
: T;Primitive Typen behandeln
Der Basisfall der Rekursion muss primitive Typen unverändert zurückgeben, statt sie in einen gemappten Objekttyp einzuschließen.
type DeepReadonly<T> =
T extends string | number | boolean | null | undefined ? T
: T extends (infer U)[] ? ReadonlyArray<DeepReadonly<U>>
: { readonly [K in keyof T]: DeepReadonly<T[K]> };DeepPartial und DeepReadonly kombinieren
Sie können beide kombinieren, um einen tief verschachtelten partiellen und schreibgeschützten Typ für sichere Konfigurationsänderungen zu erstellen.
type SafePatch<T> = DeepReadonly<DeepPartial<T>>;Überlegungen zur Leistung
Rekursive Typen bei sehr großen Objekten können die Typprüfung durch TypeScript verlangsamen. Für leistungskritischen Code sollten Sie Tiefenbeschränkungen oder eine verzögerte Auswertung in Betracht ziehen.
// For very deep schemas, consider using Zod or io-ts
// which provide runtime + compile-time deep typingPraktischer Einsatz: React-State-Patches
DeepPartial eignet sich ideal für State-Patch-Funktionen, die nur den geänderten Teil eines großen State-Objekts akzeptieren.
function patch<T>(state: T, changes: DeepPartial<T>): T {
return { ...state, ...changes } as T;
}Zusammenfassung: Tiefe Utility-Typen
DeepPartial und DeepReadonly sind rekursive gemappte Typen, die ihren Modifikator auf jede Ebene eines verschachtelten Objekts anwenden. Behandeln Sie Arrays separat und verwenden Sie für primitive Typen Basisfälle.
Schnelltest
Was ist der korrekte rekursive Basisfall für DeepPartial?
Das haben Sie gelernt
Sie haben DeepPartial und DeepReadonly mithilfe rekursiver gemappter Typen implementiert. Behandeln Sie Arrays als Sonderfall und geben Sie primitive Typen im Basisfall immer unverändert zurück.
Häufig gestellte Fragen
Ist die Lektion „DeepPartial und DeepReadonly“ kostenlos?
Ja — der vollständige Text von „DeepPartial und DeepReadonly“ 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 „DeepPartial und DeepReadonly“?
Erstellen Sie rekursive Varianten von Partial und Readonly. 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 1 von 4.
Wie lange dauert die Lektion „DeepPartial und DeepReadonly“?
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