capypad
0 Tage Serie
typescript / intermediate
Snippet

Discriminated Unions (Unterscheidbare Unions)

Discriminated Unions nutzen eine gemeinsame Literal-Eigenschaft (den Diskriminator), um TypeScript das sichere Eingrenzen von Union-Mitgliedern zu ermöglichen.

snippet.ts
typescript
1
2
3
4
5
6
7
8
9
interface Circle { kind: "circle"; radius: number; }
interface Square { kind: "square"; side: number; }
 
type Shape = Circle | Square;
 
function getArea(s: Shape) {
if (s.kind === "circle") return Math.PI * s.radius ** 2;
return s.side ** 2;
}
Erklärung
1
kind: "circle"
Ein Literal-Typ, der als eindeutige Kennung für das spezifische Interface dient.
2
type Shape = Circle | Square
Definiert einen Union-Typ, der entweder ein Circle oder ein Square sein kann.
3
if (s.kind === "circle")
TypeScript grenzt den Typ von 's' innerhalb dieses Blocks auf Circle ein.