TypeScript de Cero a Experto / Por qué TS
Inferencia: deja que TypeScript adivine (bien)
El miedo del principiante en TypeScript: "¿tengo que escribir : tipo en cada
línea?". No. TypeScript es sorprendentemente listo: en la mayoría de los casos
DEDUCE el tipo solo. Anotar de más ensucia el código tanto como no anotar lo
esencial. Hoy aprendes a distinguir dónde tu tipo hace falta y dónde estorba.
El asistente que ya lo sabe
TypeScript deduce lo local
Cuando un valor nace de algo que TS ya conoce, no anotes: lo infiere y con más precisión que tú:
const precio = 5000; // TS infiere: number
const nombre = "Café"; // TS infiere: string
const activo = true; // TS infiere: boolean
const gastos = [100, 200, 300]; // TS infiere: number[]
// el retorno también se infiere: TS sabe que esto devuelve number
function doble(n: number) {
return n * 2; // retorno inferido: number
}
// resultado de métodos conocidos: inferido
const mayusculas = nombre.toUpperCase(); // TS infiere: string
const total = gastos.reduce((s, g) => s + g, 0); // TS infiere: numberEscribir : number en cada una de esas líneas no añade seguridad —TS ya lo
sabe— y añade ruido. La regla mental: si el valor viene con su tipo puesto (un
literal, el resultado de algo tipado), cállate y deja que infiera.
La regla de oro: anota los bordes
Nota cómo solo hay dos anotaciones (nombre: string, valores: number[]) —los
bordes— y el resto fluye inferido. El código se lee limpio y TS te protege
igual: si dentro sumaras un string, lo marcaría al instante.
const vs let: el tipo se ensancha
Un detalle sutil pero útil. TypeScript infiere tipos MÁS específicos para const
que para let, porque un const no puede cambiar:
const categoria = "comida"; // tipo inferido: "comida" (¡el literal exacto!)
let estado = "activo"; // tipo inferido: string (puede reasignarse)
// 'categoria' es del tipo literal "comida", no solo string.
// 'estado' es string, porque let permite estado = "otra cosa" después.
// esto importa cuando quieres tipos literales exactos (lección de M02):
const metodo = "GET"; // "GET" — útil para uniones de literalesComo const categoria = "comida" nunca cambiará, TS lo infiere como el tipo
literal "comida" (no el genérico string). Con let, como podrías
reasignarlo, lo "ensancha" a string. Este comportamiento —widening— será
clave cuando en el módulo 2 construyas uniones de literales como "comida" | "transporte" | "ocio".
¿Cuál de estas anotaciones SOBRA (es ruido redundante) según la regla de oro?
Mini-reto
Afina el ojo: 1) escribe una función estadisticas(numeros: number[]) que
calcule suma, promedio y mayor, y devuelva un objeto con los tres; 2)
anota SOLO el parámetro y deja que TS infiera todo lo interno y el retorno; 3)
pasa el cursor (en tu editor o el Playground oficial) sobre cada const interno
y confirma que TS ya dedujo number sin que lo escribieras. Interioriza cuánto
sabe TS solo.
Qué sigue
Cierras el módulo con un reto que junta todo: montar la configuración estricta y
tipar un módulo real de "Mi Bolsillo" —anotando los bordes, dejando inferir el
resto, y sintiendo cómo strict te obliga a manejar los casos que en JavaScript
ignorabas.