CodeAventura
TypeScript
▸Tipos avanzados▸El tipo never y exhaustive checking

Misión

Editor
Consola
La consola está vacía. Pulsa EJECUTAR para correr tu código.
20 / 24El tipo never y exhaustive checking
Anterior

El tipo never y exhaustive checking

¿Qué es never?

never es el tipo que representa algo que nunca debería ocurrir. Es el tipo vacío — ningún valor puede ser never.

Si una función siempre lanza un error o tiene un loop infinito, su tipo de retorno es never.

Exhaustive checking: el superpoder de never

El uso más práctico de never es verificar que has manejado todos los casos de una union. Se llama exhaustive checking:

En el default, luz debería ser never porque ya cubrimos todos los casos. Si añadimos un nuevo valor a Semaforo (como "intermitente") y olvidamos manejarlo, TypeScript da error:

TypeScript te dice: "hay un caso que no manejaste". Esto es increíblemente útil para prevenir bugs.

¿Por qué funciona?

TypeScript va descartando tipos en cada case:

Después de cubrir todos los casos, el único tipo posible es never. Si queda algo sin cubrir, ese "algo" no se puede asignar a never y TypeScript protesta.

El patrón en la práctica

Imagina que tienes un sistema con discriminated unions y varios desarrolladores:

Si alguien añade | { tipo: "webhook"; url: string } a la union, el default dará error de compilación hasta que se añada el case "webhook". Ningún caso se escapa.

Tu desafío 🚀

Partiendo del código de formas geométricas (Círculo, Rectángulo, Triángulo):

  1. Añade un nuevo tipo Trapecio con baseMayor, baseMenor y altura
  2. Inclúyelo en la union de Forma
  3. Añade el caso "trapecio" en el switch
  4. Añade un default con exhaustive check usando never
  5. Calcula el área del trapecio: (baseMayor + baseMenor) * altura / 2

never es el canario en la mina del sistema de tipos. Si dejas un caso sin manejar, never avisa antes de que el bug llegue a producción.