Las uniones discriminadas (tagged unions) son la forma principal de modelar datos que pueden ser una de varias variantes. Usan una propiedad literal común (discriminante) para diferenciar los miembros.
Sintaxis básica
type Shape =
| { kind: 'circle'; radius: number }
| { kind: 'square'; side: number }
| { kind: 'triangle'; base: number; height: number };
Estrechamiento (narrowing)
TypeScript reduce automáticamente el tipo basado en el discriminante. Usar switch con discriminante para manejar cada variante con seguridad de tipos.
Exhaustividad
Combinar con never para garantizar que todos los casos se manejan: default: const _exhaustive: never = value;.
Patrones avanzados
Uniones discriminadas genéricas, discriminantes con plantillas literales, uniones discriminadas para máquinas de estado y gestión de resultados (OK vs Error).

