Manejo exhaustivo de errores con uniones discriminadas
Escriba handlers exhaustivos para uniones discriminadas usando switch+never, utilidades auxiliares y comprobaciones de cobertura en tiempo de compilación entre módulos.
Manejo exhaustivo de errores con uniones discriminadas es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 2 de 2. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 2 lecciones en total.
Introducción
Objetivo: garantizar que se gestione cada miembro de la unión. Usará switch + never, una pequeña utilidad exhaustiveCheck y verá cómo mantener la cobertura entre archivos.
- Discriminantes (campos tag)
- Switches exhaustivos
- Valores predeterminados de fallo inmediato
Unión discriminada
Una unión discriminada tiene una etiqueta compartida (aquí kind). Cada variante contiene sus propios datos.
export type Payment =
| { kind: "Card"; last4: string }
| { kind: "Cash" }
| { kind: "Wire"; iban: string }Switch + never
La rama default asigna p a never. Si añade una variante más adelante, el compilador generará un error hasta que la gestione.
export function describe(p: Payment): string {
switch (p.kind) {
case "Card": return `Card ••••${p.last4}`
case "Cash": return "Cash"
case "Wire": return `Wire ${p.iban}`
default: {
const _exhaustive: never = p
return _exhaustive
}
}
}Ayudante exhaustiveCheck
Use un pequeño ayudante para hacer evidente la intención. El parámetro never convierte los casos no gestionados en un error de tipos, no solo en una excepción en tiempo de ejecución.
export function exhaustiveCheck(x: never): never {
throw new Error(`Unhandled case: ${JSON.stringify(x)}`)
}
export function pay(p: Payment): string {
switch (p.kind) {
case "Card": return "charged card"
case "Cash": return "took cash"
case "Wire": return "initiated wire"
default: return exhaustiveCheck(p)
}
}Cobertura entre módulos
Cuando las uniones se definen en un archivo y se gestionan en otro, añadir una rama sigue haciendo que fallen las compilaciones hasta que se actualicen todos los switches; exactamente lo que queremos.
// errors.ts
export type AppError =
| { tag: "Auth"; reason: "Unauthorized" | "Forbidden" }
| { tag: "NotFound"; resource: string }
| { tag: "Conflict"; resource: string }
// handler.ts
import type { AppError } from "./errors"
import { exhaustiveCheck } from "./exhaustive"
export function toStatus(e: AppError): number {
switch (e.tag) {
case "Auth": return e.reason === "Unauthorized" ? 401 : 403
case "NotFound": return 404
case "Conflict": return 409
default: return exhaustiveCheck(e)
}
}Consejos y errores comunes
Consejos:
- Prefiera etiquetas de literales de cadena (por ejemplo,
tag/kind). - Mantenga las variantes pequeñas; componga los datos mediante objetos anidados en lugar de uniones enormes.
- No use nunca
defaultsin una guarda denever; oculta los casos no gestionados.
Comprobación de exhaustividad
Comprobación rápida: ¿Qué impone la gestión exhaustiva?
Resumen
Resumen: Use un discriminante, escriba un switch y, en la rama predeterminada, asigne el valor a never (o llame a exhaustiveCheck) para garantizar una cobertura completa a medida que evolucionan las uniones.
Aprende TypeScript con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 101
- Lecciones
- 352
Preguntas frecuentes
¿La lección «Manejo exhaustivo de errores con uniones discriminadas» es gratis?
Sí — el texto completo de «Manejo exhaustivo de errores con uniones discriminadas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 2 lecciones en total.
¿Qué aprenderé en «Manejo exhaustivo de errores con uniones discriminadas»?
Escriba handlers exhaustivos para uniones discriminadas usando switch+never, utilidades auxiliares y comprobaciones de cobertura en tiempo de compilación entre módulos. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar TypeScript Academy?
No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 2.
¿Cuánto tiempo toma la lección «Manejo exhaustivo de errores con uniones discriminadas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?
Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Tipos con estilo Result/Either
- Manejo exhaustivo de errores con uniones discriminadas