typescript / expert
Snippet
Vollständigkeitsprüfung von Unions-Kontrollflüssen zur Kompilierzeit
Vollständige Typreduzierung nutzt den TypeScript-Typ `never`, um zu überprüfen, dass alle Varianten einer diskriminierten Union in Kontrollfluss-Anweisungen behandelt werden. Das Hinzufügen neuer Union-Varianten führt zu einem Kompilierungsfehler in Standardzweigen, die die unerreichbare Zusicherung aufrufen.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type Command =| { type: "START"; payload: { timestamp: number } }| { type: "STOP"; payload: { reason: string } };function assertUnreachable(x: never): never {throw new Error(`Unhandled union variant: ${JSON.stringify(x)}`);}function processCommand(cmd: Command): string {switch (cmd.type) {case "START":return `Starting at ${cmd.payload.timestamp}`;case "STOP":return `Stopping: ${cmd.payload.reason}`;default:return assertUnreachable(cmd);}}
Erklärung
1
type Command =
Definiert einen diskriminierten Union-Typ für g��ltige Anwendungsbefehle.
2
function assertUnreachable(x: never): never {
Definiert einen Funktionsparameter vom Typ `never`, der die Kompilierung fehlschlagen lässt, wenn eine Variante unbehandelt bleibt.
3
throw new Error(`Unhandled union variant: ${JSON.stringify(x)}`);
Bietet Laufzeitsicherheit für den Fall, dass unerwartete Daten die Prüfungen zur Kompilierzeit umgehen.
4
function processCommand(cmd: Command): string {
Implementiert die Befehlsverarbeitungslogik mittels Switch-Typreduzierung.
5
default:
Erreicht den Default-Zweig nur, wenn die Switch-Fälle den Union-Typ nicht vollständig abdecken.
6
return assertUnreachable(cmd);
Übergibt die reduzierte Befehlsvariable, um die Vollständigkeit des Typs zur Kompilierzeit zu überprüfen.