typescript / expert
Snippet
Vollständige Union-Diskriminanten-Prüfung mittels Never-Typ-Absicherung
Dieses Snippet stellt eine Vollständigkeitsprüfung für diskriminierte Unions zur Kompilierzeit mittels des `never`-Typs sicher. Wenn ein Entwickler eine neue Variante zur Union hinzufügt, ohne die Handhabung anzupassen, löst TypeScript einen Build-Fehler aus, da der unbehandelte Typ nicht an `never` zugewiesen werden kann.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class UnreachableCaseError extends Error {constructor(val: never) {super(`Unreachable case encountered: ${JSON.stringify(val)}`);}}type Shape = { kind: "circle"; radius: number } | { kind: "square"; size: number };function getArea(shape: Shape): number {switch (shape.kind) {case "circle": return Math.PI * shape.radius ** 2;case "square": return shape.size ** 2;default: throw new UnreachableCaseError(shape);}}
Erklärung
1
class UnreachableCaseError extends Error {
Benutzerdefinierte Fehlerklasse, die Standard-Error zur Laufzeitvalidierung erweitert.
2
constructor(val: never) {
Beschränkt den Parametertyp strikt auf never, um statische Vollständigkeit zu garantieren.
3
function getArea(shape: Shape): number {
Berechnet die Fläche basierend auf der diskriminierten Union-Eigenschaft 'kind'.
4
default: throw new UnreachableCaseError(shape);
Schlägt beim Kompilieren fehl, wenn eine Variante der Union unbehandelt bleibt.