JavaScript es tipado débil
En esta clase aterrizamos una idea clave para evitar bugs tontos: JavaScript es de tipado débil.
Esto no es “JavaScript es malo”, es “JavaScript toma decisiones por ti”. Y a veces, esas decisiones son… creativas.
La razón principal: hace conversiones implícitas (type coercion).
Tipado débil vs tipado fuerte
- Tipado débil: el lenguaje intenta “arreglar” tipos por su cuenta para que la operación siga adelante.
- Tipado fuerte: el lenguaje es más estricto y no te deja mezclar tipos a la ligera.
En JavaScript, muchas veces, en vez de fallar, convierte.
El típico ejemplo de conversión implícita
Imagina que tienes una función que espera un número, pero le pasas un string:
function doble(n) {
return n * 2
}
doble("21") // 42 (sí, te lo convierte)
JavaScript se lo “come con patatas” y lo transforma automáticamente.
Ese es el corazón del tipado débil: no te obliga a tener el tipo correcto, intenta adaptarse.
Entonces, ¿TypeScript “endurece” JavaScript?
No.
TypeScript no cambia el comportamiento de JavaScript en runtime. Si en JavaScript "21" * 2 funciona, seguirá funcionando.
Lo que hace TypeScript es avisarte antes:
- El editor te marca el problema
- El compilador te lo canta
- Tú lo arreglas antes de que llegue a producción
Ejemplo:
function doble(n: number) {
return n * 2
}
doble("21") // Error de tipos: aquí está el valor real de TS
TypeScript no evita la conversión en JavaScript, pero te ayuda a no depender de ella.
Por qué esto importa en una API
En backend (Express, Node.js), muchísimas cosas vienen como string:
req.queryreq.params- Datos de formularios
Si asumes números sin validar, te puedes comer:
- Cálculos raros
- Comparaciones inconsistentes
- Bugs que aparecen “solo a veces”
Buenas prácticas para no vivir al límite
Convierte de forma explícita cuando lo necesites:
const page = Number(req.query.page)
Valida lo que entra (no confíes en el cliente).
Evita comparaciones “mágicas”:
0 == "0" // true (coerción)
0 === "0" // false (sin coerción)
Si puedes, apóyate en TypeScript para que el propio código te frene.
Idea clave para quedarte
- JavaScript es tipado débil porque hace conversiones implícitas.
- TypeScript no cambia JavaScript, pero sí hace que sea mucho más difícil que te la cuelen.