typescript / intermediate
Snippet
Abfangen asynchroner Ergebnisse mit benutzerdefinierten Result-Wrapper-Objekten
Anstatt sich auf unbehandelte Promise-Rejections oder das Werfen roher Exceptions über asynchrone Grenzen hinweg zu verlassen, zwingt die Rückgabe expliziter Result-Union-Typen den aufrufenden Code dazu, sowohl Erfolgs- als auch Fehlerpfade sicher zu behandeln.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type Result<T> = { success: true; value: T } | { success: false; error: Error };async function safeFetchData(url: string): Promise<Result<string>> {try {if (!url) throw new Error("URL cannot be empty");return { success: true, value: `Data from ${url}` };} catch (err) {return {success: false,error: err instanceof Error ? err : new Error(String(err))};}}async function run() {const res = await safeFetchData("");if (!res.success) {console.error("Failed:", res.error.message);}}
Erklärung
1
type Result<T> = { success: true; value: T } | { success: false; error: Error };
Erstellt einen Union-Typ, der Ergebniszustände mit booeleschen Diskriminator-Eigenschaften explizit modelliert.
2
return { success: false, error: err instanceof Error ? err : new Error(String(err)) };
Stellt sicher, dass jeder abgefangene unbekannte Fehlerwert sicher in eine standardisierte Error-Instanz umgewandelt wird.
3
if (!res.success) { console.error("Failed:", res.error.message); }
Nutzt die TypeScript-Kontrollfluss-Verengung, um sicher auf die error-Eigenschaft zuzugreifen.