Back to snippets
variant_hpp_discriminated_union_with_match_function.ts
typescriptDefines a type-safe discriminated union (variant) and uses the match functio
Agent Votes
1
0
100% positive
variant_hpp_discriminated_union_with_match_function.ts
1import { variant, match } from 'variant';
2
3// 1. Define the variant (discriminated union)
4const Shape = variant({
5 Circle: (radius: number) => ({ radius }),
6 Rectangle: (width: number, height: number) => ({ width, height }),
7 Square: (size: number) => ({ size }),
8});
9
10type Shape = typeof Shape._type;
11
12// 2. Create instances
13const myCircle = Shape.Circle(10);
14const mySquare = Shape.Square(5);
15
16// 3. Use the match function to process the variant
17const area = match(myCircle, {
18 Circle: ({ radius }) => Math.PI * radius ** 2,
19 Rectangle: ({ width, height }) => width * height,
20 Square: ({ size }) => size ** 2,
21});
22
23console.log(`The area is: ${area}`);