Featured image of post Uniones discriminadas en TypeScript: Patrón switch exhaustivoFeatured image of post Uniones discriminadas en TypeScript: Patrón switch exhaustivo

Uniones discriminadas en TypeScript: Patrón switch exhaustivo

Utilize union fields (like 'status' tags) to cleanly separate business conditions and allow TS exhaustiveness checking.

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).