typescript / intermediate
Snippet
Behandlung asynchroner Operationen mit typsicheren Result-Objekten
Anstatt sich auf unbehandelte Promise-Rejections zu verlassen, verpackt dieses Muster asynchrone Ergebnisse in typisierte Erfolgs- oder Fehler-Objekte. Es bietet eine strukturierte Fehlerbehandlung mithilfe benutzerdefinierter Fehlerklassen.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class NetworkError extends Error {constructor(message: string, public readonly statusCode: number) {super(message);this.name = "NetworkError";}}type AsyncResult<T> =| { success: true; data: T }| { success: false; error: NetworkError };async function fetchUserData(id: number): Promise<AsyncResult<{ name: string }>> {try {if (id <= 0) {throw new NetworkError("Invalid user ID provided", 400);}return { success: true, data: { name: "Alice" } };} catch (err) {const error = err instanceof NetworkError ? err : new NetworkError("Unknown error", 500);return { success: false, error };}}
Erklärung
1
class NetworkError extends Error {
Definiert eine benutzerdefinierte Fehlerklasse, die von der integrierten Error-Klasse erbt.
2
type AsyncResult<T> =
Erstellt einen Containertyp, der entweder ein erfolgreiches Ergebnis oder einen NetworkError darstellt.
3
async function fetchUserData(id: number): Promise<AsyncResult<{ name: string }>> {
Deklariert eine asynchrone Funktion, die ein Promise mit dem typisierten Ergebnisobjekt zurückgibt.
4
const error = err instanceof NetworkError ? err : new NetworkError("Unknown error", 500);
Stellt sicher, dass abgefangene Ausnahmen dem erwarteten NetworkError-Typ entsprechen.