Uniones e intersecciones: modelado expresivo sin caos

Representa estados complejos con unión/intersección y mejora la seguridad del dominio.

Uniones e intersecciones permiten modelar estados reales del negocio sin caer en booleanos sueltos y objetos ambiguos.

Las uniones discriminadas hacen explícitos los caminos válidos de un flujo y fuerzan manejo exhaustivo.

Las intersecciones son útiles para componer capacidades, pero requieren atención para no crear tipos imposibles.

Bien usadas, estas herramientas convierten lógica condicional frágil en contratos mantenibles.

  • Modela estados mutuamente excluyentes con una clave discriminante explícita.
  • Estados como loading/success/error en peticiones son un caso clásico: cada estado exige campos distintos.
  • Con una propiedad discriminante (status), TypeScript estrecha automáticamente el tipo dentro de cada rama.
  • Esto elimina accessos inseguros a datos que aún no existen y evita validaciones repetitivas.
  • Una intersección debe representar suma de capacidades, no mezcla accidental de responsabilidades.

Uniones discriminadas para flujos de estado

Modela estados mutuamente excluyentes con una clave discriminante explícita.

Estados como loading/success/error en peticiones son un caso clásico: cada estado exige campos distintos.

Con una propiedad discriminante (status), TypeScript estrecha automáticamente el tipo dentro de cada rama.

Esto elimina accessos inseguros a datos que aún no existen y evita validaciones repetitivas.

Intersecciones con objetivo claro

Una intersección debe representar suma de capacidades, no mezcla accidental de responsabilidades.

Usa intersecciones cuando una entidad deba cumplir varios contratos simultáneos (por ejemplo, auditable + versionable).

Evita intersectar tipos incompatibles: el resultado puede volverse never implícito en propiedades críticas.

Cuando la composición se vuelve difícil de leer, divide en tipos intermedios con nombres semánticos.

Exhaustividad y control de cambios

La exhaustividad convierte cambios de producto en errores de compilación accionables.

Si añades un nuevo estado a una unión, el compilador te marca exactamente qué switch o handler debe actualizarse.

Ese feedback estructural evita bugs silenciosos típicos de ramas default demasiado genéricas.

Incorpora checks exhaustivos en flujos core para que el sistema te ayude a evolucionar sin regresiones.

TypeScript
06

Uniones e intersecciones: modelado expresivo sin caos

Representa estados complejos con unión/intersección y mejora la seguridad del dominio.

Código del tema: modelado de estados

📘 Teoría

Uniones discriminadas para flujos de estado

Modela estados mutuamente excluyentes con una clave discriminante explícita.

1

Estados como loading/success/error en peticiones son un caso clásico: cada estado exige campos distintos.

2

Con una propiedad discriminante (status), TypeScript estrecha automáticamente el tipo dentro de cada rama.

3

Esto elimina accessos inseguros a datos que aún no existen y evita validaciones repetitivas.

Intersecciones con objetivo claro

Una intersección debe representar suma de capacidades, no mezcla accidental de responsabilidades.

1

Usa intersecciones cuando una entidad deba cumplir varios contratos simultáneos (por ejemplo, auditable + versionable).

2

Evita intersectar tipos incompatibles: el resultado puede volverse never implícito en propiedades críticas.

3

Cuando la composición se vuelve difícil de leer, divide en tipos intermedios con nombres semánticos.

Estados y capacidades compuestas
Revisar
type ContextoTypescriptunionesinterseccionesmedio = {
  foco: string;
  objetivo: string;
  riesgo: string;
};

const contexto: ContextoTypescriptunionesinterseccionesmedio = {
  foco: "modelado de estados",
  objetivo: "escribir código predecible",
  riesgo: "abstraer sin criterio",
};

console.log("Checklist técnico:", contexto);

export {};

Exhaustividad y control de cambios

La exhaustividad convierte cambios de producto en errores de compilación accionables.

1

Si añades un nuevo estado a una unión, el compilador te marca exactamente qué switch o handler debe actualizarse.

2

Ese feedback estructural evita bugs silenciosos típicos de ramas default demasiado genéricas.

3

Incorpora checks exhaustivos en flujos core para que el sistema te ayude a evolucionar sin regresiones.

🧪 Aprende probando

Ejemplo Ejemplo guiado Lee, ejecuta y modifica para ver cómo cambia el comportamiento al ajustar tipos.
Ejemplo Demo interactiva Prueba una mini interfaz para visualizar decisiones de tipado.

🏁 Retos

Reto Reto práctico Completa el ejercicio aplicando lo visto en esta sesión.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre TypeScript.

Test de TypeScript

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .