export function assertNever(x: never): never {
throw new Error(
`Unhandled discriminant: ${typeof x === 'object' ? JSON.stringify(x) : String(x)}`
);
}
type Shape =
| { kind: 'circle'; radius: number }
| { kind: 'square'; size: number }
| { kind: 'rectangle'; w: number; h: number };
function area(s: Shape): number {
switch (s.kind) {
case 'circle': return Math.PI * s.radius ** 2;
case 'square': return s.size * s.size;
case 'rectangle': return s.w * s.h;
default: return assertNever(s); // catches new variants
}
}
Create a free account and build your private vault. Share publicly whenever you want.