typescript / intermediate
Snippet
Verwaltung von asynchronem Zustand mit diskriminierten Union-Typen
Diskriminierte Union-Typen kombinieren eine gemeinsame literale Eigenschaft ('status') über Union-Elemente, wodurch TypeScript Nutzlasttypen in Kontrollflussblöcken automatisch eingrenzen kann.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type AsyncState<T> =| { status: 'idle' }| { status: 'loading' }| { status: 'success'; data: T }| { status: 'error'; error: Error };function renderState<T>(state: AsyncState<T>): string {switch (state.status) {case 'idle':return 'Waiting to start...';case 'loading':return 'Fetching data...';case 'success':return `Data loaded: ${JSON.stringify(state.data)}`;case 'error':return `Error occurred: ${state.error.message}`;}}
Erklärung
1
type AsyncState<T> =
Definiert einen generischen Union-Typ, der sich gegenseitig ausschließende Zustandsvarianten darstellt.
2
| { status: 'success'; data: T }
Kombiniert die diskriminierende status-Eigenschaft mit Nutzdaten vom Typ T.
3
switch (state.status) {
Wertet die diskriminierende Eigenschaft aus, um die spezifische Variante einzugrenzen.
4
case 'success': return `Data loaded: ${JSON.stringify(state.data)}`;
In diesem Zweig grenzt TypeScript den Zustand auf die success-Variante ein und ermöglicht sicheren Zugriff auf data.