typescript / expert
Snippet
Typsichere Transformation von Async-Iterator-Streams mit Fehlertoleranz
Async Generator ermöglichen das Streamen asynchroner Daten. Das Einbetten von Yield-Operationen in einen diskriminierten Union-Typ StreamResult stellt sicher, dass Verarbeitungsfehler während der Stream-Transformation den Iterator-Stream nicht unerwartet abbrechen, was eine fehlerresistente, typsichere Fehlerbehandlung ermöglicht.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type StreamResult<T> =| { success: true; data: T }| { success: false; error: Error };async function* transformStream<TIn, TOut>(source: AsyncIterable<TIn>,transform: (item: TIn) => Promise<TOut>): AsyncGenerator<StreamResult<TOut>, void, unknown> {for await (const item of source) {try {const transformed = await transform(item);yield { success: true, data: transformed };} catch (err) {yield {success: false,error: err instanceof Error ? err : new Error(String(err))};}}}
Erklärung
1
type StreamResult<T> = | { success: true; data: T } | { success: false; error: Error };
Definiert eine diskriminierte Union zur Repräsentation erfolgreich transformierter Daten oder abgefangener Stream-Fehler.
2
async function* transformStream<TIn, TOut>(
Deklariert einen Async Generator, der ein AsyncGenerator-Objekt mit StreamResult<TOut>-Yields zurückgibt.
3
for await (const item of source)
Iteriert asynchron über Elemente, die aus der eingehenden AsyncIterable-Quelle bereitgestellt werden.
4
yield { success: false, error: err instanceof Error ? err : new Error(String(err)) };
Fängt Laufzeitfehler der Transformation ab und gibt strukturierte Fehler-Objekte aus, ohne die Schleife abzubrechen.