typescript / intermediate
Snippet
Extraktion von Funktionsparametertypen mit bedingten Typen und dem infer-Schlüsselwort
TypeScript ermöglicht die dynamische Ableitung interner Typen durch bedingte Typen in Kombination mit dem 'infer'-Schlüsselwort. Diese Technik erlaubt es, Argumentsignaturen direkt aus bestehenden Funktionen zu extrahieren, ohne Typdefinitionen zu doppeln.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
type ExtractFirstArg<T> = T extends (first: infer U, ...rest: any[]) => any ? U : never;function logUser(user: { id: number; name: string }): void {console.log(`${user.name} (${user.id})`);}type UserParam = ExtractFirstArg<typeof logUser>;const validUser: UserParam = { id: 101, name: "Alice" };logUser(validUser);
Erklärung
1
type ExtractFirstArg<T> = T extends (first: infer U, ...rest: any[]) => any ? U : never;
Definiert einen generischen Typ, der prüft, ob T eine Funktionssignatur ist, und deren erstes Argument in der Typvariablen U erfasst.
2
type UserParam = ExtractFirstArg<typeof logUser>;
Wendet ExtractFirstArg auf den Funktionstyp von logUser an, um dessen ersten Parametertyp dynamisch zu extrahieren.
3
const validUser: UserParam = { id: 101, name: "Alice" };
Erstellt ein Objekt, das garantiert der extrahierten Parameterstruktur entspricht.