type Shape = { kind: "circle"; r: number } | { kind: "square"; s: number }; export function area(sh: Shape): number { switch (sh.kind) { case "circle": return Math.PI * sh.r * sh.r; case "square": return sh.s * sh.s; default: { const never: never = sh; return never; } } }