Hasta ahora hemos usado tipos amplios: string, number, boolean. Pero TypeScript puede ser mucho más específico. Un literal type es un tipo que acepta un único valor exacto:
"norte" no es solo un string — es un tipo que solo acepta el valor "norte". Combinado con union (|), creas un set cerrado de valores permitidos.
Observa la diferencia:
Con let, el valor podría cambiar, así que TypeScript infiere el tipo amplio string. Con const, el valor nunca cambia, así que TypeScript infiere el literal type "hola".
El patrón más común es combinar varios literal types con union:
Esto es como un enum casero — define exactamente qué valores son válidos.
No solo los strings pueden ser literales:
Cuando verificas un valor de un literal union, TypeScript sabe exactamente qué es:
En cada case, TypeScript sabe que luz es exactamente ese literal.
A veces necesitas que TypeScript trate un valor como literal en contextos donde normalmente no lo haría:
as const congela el tipo: todo se vuelve readonly y los valores se tratan como literal types.
EstadoPedido con los literal types: "pendiente", "enviado", "entregado" y "cancelado"EstadoPedido y devuelva un emoji descriptivo para cada estadoLos literal types cierran la puerta a los valores inesperados. En vez de "cualquier string", dices exactamente cuáles son válidos. TypeScript se asegura de que nadie se salga del guion.