typescript / intermediate
Snippet
Transformation von Eigenschaftsnamen durch Mapped Types und Key Remapping
Mapped Types können über Objektschlüssel iterieren und mittels Vorlagen-Literal-Typen sowie dem 'as'-Schlüsselwort Eigenschaftsnamen zur Kompilierzeit dynamisch umbenennen. Dieser Ausschnitt verwandelt Objektschlüssel wie 'theme' in typsichere Callback-Namen wie 'onThemeChanged'.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
type EventHandlers<T extends Record<string, any>> = {[K in keyof T as `on${Capitalize<string & K>}Changed`]?: (newValue: T[K]) => void;};interface UserSettings {theme: string;notifications: boolean;}type UserSettingsListeners = EventHandlers<UserSettings>;
Erklärung
1
[K in keyof T as `on${Capitalize<string & K>}Changed`]?: (newValue: T[K]) => void;
Iteriert über Schlüssel K, wandelt den ersten Buchstaben in einen Großbuchstaben um, stellt 'on' voran, hängt 'Changed' an und weist einen passenden Callback-Typ zu.
2
type UserSettingsListeners = EventHandlers<UserSettings>;
Generiert eine Schnittstelle mit optionalen Listenern: onThemeChanged und onNotificationsChanged.