Ya conoces los union types: string | number. Pero cuando trabajas con objetos, los unions se vuelven mucho más potentes con un patrón llamado discriminated unions.
La idea: cada miembro de la union tiene una propiedad común (el "discriminante") con un valor literal diferente. TypeScript usa esa propiedad para saber exactamente qué tipo es.
tipo es el discriminante. Un Circulo siempre tiene tipo: "circulo", un Rectangulo siempre tiene tipo: "rectangulo".
Cuando verificas el discriminante, TypeScript sabe qué tipo es:
Sin type guards manuales, sin casting. TypeScript entiende tu código.
El switch es perfecto para discriminated unions:
Cada case refina el tipo automáticamente. Dentro de case "circulo", solo puedes acceder a las propiedades de Circulo.
Las discriminated unions están en todas partes:
Aunque type, kind y status son los más comunes, cualquier propiedad con literal types funciona:
Lo importante es que todos los miembros de la union tengan esa propiedad con un literal type diferente.
tipo como discriminantecalcularArea que use switch para calcular el área de cada formaLas discriminated unions son uno de los patrones más importantes de TypeScript. Modelan datos que pueden tener diferentes formas de manera segura y elegante.