Skip to content

Lección 76 — any, unknown, void, never

Estos cuatro tipos especiales cubren casos extremos del sistema de tipos de TypeScript.

any desactiva completamente el tipado para una variable. Es como decirle a TS “confía en mí, sé lo que hago”. Úsalo solo como último recurso o durante migraciones de JS a TS.

let dato: any = 'texto';
dato = 42; // ✅ se puede reasignar a cualquier tipo
dato.toUpperCase(); // ✅ sin errores (pero falla en runtime si no es string)

Abusar de any elimina todas las ventajas de TypeScript.

unknown es el tipo seguro para valores desconocidos. A diferencia de any, no puedes operar con un unknown sin antes verificar su tipo (type narrowing).

let valor: unknown = obtenerDato();
// valor.toUpperCase(); ❌ Error: Object is of type 'unknown'
if (typeof valor === 'string') {
console.log(valor.toUpperCase()); // ✅ ok, porque TS sabe que es string
}

void se usa en funciones que no retornan un valor. En la práctica, retornan undefined.

function logMensaje(mensaje: string): void {
console.log(mensaje);
// no tiene return
}

never representa valores que nunca ocurren. Una función que lanza una excepción siempre, o que tiene un bucle infinito, retorna never.

function error(mensaje: string): never {
throw new Error(mensaje);
}
function bucleInfinito(): never {
while (true) {
// nunca termina
}
}

never también es útil para exhaustiveness checking: asegurarte de que cubriste todos los casos en un switch.

type Forma = 'circulo' | 'cuadrado' | 'triangulo';
function area(forma: Forma): number {
switch (forma) {
case 'circulo': return 1;
case 'cuadrado': return 2;
case 'triangulo': return 3;
default:
// Si alguien añade un nuevo tipo a Forma sin actualizar el switch,
// esto dará error de compilación
const _exhaustivo: never = forma;
return _exhaustivo;
}
}

Escribe una función parseJSON(texto: string): unknown que haga JSON.parse(texto) y retorne unknown. Luego escribe una función esUsuario(valor: unknown): valor es { nombre: string; edad: number } que verifique que el valor tiene la forma correcta (type guard). Usa unknown y type narrowing adecuadamente.

void no es lo mismo que never. Una función void termina pero no retorna valor. Una función never nunca termina exitosamente (lanza error o bucle infinito).

Usa unknown en lugar de any para APIs externas, datos de formularios, o respuestas de fetch. Te obliga a hacer validación y hace tu código más robusto.