Lección 76 — any, unknown, void, never
🧠 Concepto
Section titled “🧠 Concepto”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 tipodato.toUpperCase(); // ✅ sin errores (pero falla en runtime si no es string)Abusar de any elimina todas las ventajas de TypeScript.
unknown
Section titled “unknown”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.
💻 Ejemplo
Section titled “💻 Ejemplo”Exhaustiveness checking con never
Section titled “Exhaustiveness checking con never”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; }}📝 Ejercicio
Section titled “📝 Ejercicio”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.
⚠️ Nota
Section titled “⚠️ Nota”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.