Pattern Matching with Discriminated Unions
123456789101112131415161718type Shape = | { kind: "circle"; radius: number } | { kind: "square"; side: number } | { kind: "rectangle"; width: number; height: number }; function area(shape: Shape): number { switch (shape.kind) { case "circle": // Only a circle has a radius property return Math.PI * shape.radius * shape.radius; case "square": // Only a square has a side property return shape.side * shape.side; case "rectangle": // Only a rectangle has width and height properties return shape.width * shape.height; } }
When working with discriminated unions, you often need to write logic that depends on the specific variant of the union you are handling. By using the discriminant property—in this example, "kind"—you can pattern match on each possible case. A switch statement is a natural fit for this purpose: it allows you to branch your logic based on the value of the discriminant, and, crucially, gives you safe access to properties that exist only on a particular variant.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Can you explain what a discriminated union is in TypeScript?
How does the switch statement ensure type safety in this example?
Can you show how to add another shape to this union?
Awesome!
Completion rate improved to 5.88
Pattern Matching with Discriminated Unions
Desliza para mostrar el menú
123456789101112131415161718type Shape = | { kind: "circle"; radius: number } | { kind: "square"; side: number } | { kind: "rectangle"; width: number; height: number }; function area(shape: Shape): number { switch (shape.kind) { case "circle": // Only a circle has a radius property return Math.PI * shape.radius * shape.radius; case "square": // Only a square has a side property return shape.side * shape.side; case "rectangle": // Only a rectangle has width and height properties return shape.width * shape.height; } }
When working with discriminated unions, you often need to write logic that depends on the specific variant of the union you are handling. By using the discriminant property—in this example, "kind"—you can pattern match on each possible case. A switch statement is a natural fit for this purpose: it allows you to branch your logic based on the value of the discriminant, and, crucially, gives you safe access to properties that exist only on a particular variant.
¡Gracias por tus comentarios!