typescript / intermediate
Snippet
Extraktion von Funktionstrückgabetypen mittels Bedingter Typen und Infer
Bedingte Typen ermöglichen Typtransformationen basierend auf Formprüfungen (T extends U ? X : Y). Das Schlüsselwort 'infer' führt eine Typvariable innerhalb der bedingten Prüfung ein, um innere Typen zu erfassen, wie etwa das automatische Entpacken eines von einer Funktionssignatur zurückgegebenen Promise.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
type ExtractPromiseResult<T> = T extends (...args: any[]) => Promise<infer R>? R: T extends (...args: any[]) => infer R? R: T;async function fetchUserStatus(userId: string) {return { id: userId, isActive: true, role: "admin" as const };}type UserStatus = ExtractPromiseResult<typeof fetchUserStatus>;
Erklärung
1
type ExtractPromiseResult<T> = T extends (...args: any[]) => Promise<infer R>
Prüft, ob T eine Funktion ist, die ein Promise zurückgibt, und leitet den aufgelösten inneren Typ R ab.
2
: T extends (...args: any[]) => infer R
Fallback-Zweig, der den Rückgabetyp R extrahiert, wenn T eine reguläre nicht-asynchrone Funktion ist.
3
type UserStatus = ExtractPromiseResult<typeof fetchUserStatus>;
Wird zu { id: string; isActive: boolean; role: 'admin' } aufgelöst, indem der aufgelöste Wert von fetchUserStatus extrahiert wird.