Lección 77 — Inferencia y Anotaciones
🧠 Concepto
Section titled “🧠 Concepto”TypeScript se esfuerza por deducir los tipos automáticamente siempre que puede. A esto se le llama inferencia de tipos. Las anotaciones explícitas son opcionales cuando el tipo es obvio.
Inferencia básica
Section titled “Inferencia básica”let nombre = 'Ana'; // TS infiere: stringlet edad = 25; // TS infiere: numberlet esActivo = true; // TS infiere: booleanlet frutas = ['manzana']; // TS infiere: string[]Inferencia de retorno de función
Section titled “Inferencia de retorno de función”function sumar(a: number, b: number) { return a + b; // TS infiere que retorna number}Inferencia con const
Section titled “Inferencia con const”Cuando usas const, TS infiere el tipo literal, no el tipo general:
const NOMBRE = 'Ana'; // tipo: 'Ana' (literal), no stringconst EDAD = 25; // tipo: 25 (literal), no number
// Con let en cambio:let nombre = 'Ana'; // tipo: stringCuándo usar anotaciones explícitas
Section titled “Cuándo usar anotaciones explícitas”Aunque TS infiere muy bien, hay casos donde conviene anotar:
- Parámetros de función: siempre deben anotarse (no hay inferencia desde el caller).
- Retorno complejo: cuando quieres asegurar que la función retorna exactamente lo esperado.
- Declaración sin valor inicial.
- Variables que cambiarán a otro tipo (aunque esto suele ser mala práctica).
💻 Ejemplo
Section titled “💻 Ejemplo”Anotaciones necesarias vs innecesarias
Section titled “Anotaciones necesarias vs innecesarias”// ❌ Anotación redundantelet mensaje: string = 'Hola';
// ✅ Mejor (inferencia)let mensaje = 'Hola';
// ✅ Anotación necesaria (parámetro)function saludar(nombre: string): string { return `Hola ${nombre}`;}
// ✅ Anotación útil (retorno explícito)function operacionCompleja(a: number, b: number): number { return a * b + 10;}
// ✅ Anotación necesaria (sin valor inicial)let resultado: number;resultado = 42;Tipos literales con const
Section titled “Tipos literales con const”const ROL = 'admin'; // tipo: 'admin'const PUERTO = 3000; // tipo: 3000
// Útil para configuraciones fijastype RolUsuario = 'admin' | 'usuario' | 'invitado';
function configurarRol(rol: RolUsuario): void { // ...}
configurarRol('admin'); // ✅configurarRol('superadmin'); // ❌ Error📝 Ejercicio
Section titled “📝 Ejercicio”Declara las siguientes variables sin anotar el tipo y deja que TS infiera:
ciudadcon valor'Madrid'→ ¿qué tipo infiere?poblacioncon valor3_200_000→ ¿qué tipo infiere?esCapitalcon valortrue→ ¿qué tipo infiere?datoscon valornull→ ¿qué tipo infiere?
Luego declara con const: PI = 3.1416. Inspecciona el tipo con el cursor en VS Code. ¿Qué diferencia notas respecto a let?
⚠️ Nota
Section titled “⚠️ Nota”TypeScript es más inteligente de lo que parece. Infiere tipos a través de condicionales, arrays, reducers y funciones complejas. Confía en la inferencia y solo anota cuando sea necesario.
VS Code te muestra el tipo inferido al pasar el cursor sobre una variable. Úsalo para entender qué está infiriendo TS y detectar posibles errores temprano.