Cómo funciona TypeScript: compilación vs tiempo de ejecución

En esta clase aclaramos un punto que provoca errores muy tontos (y muy caros): TypeScript no funciona en tiempo de ejecución.

TypeScript mejora tu experiencia como developer, te avisa de errores antes de ejecutar, y te ayuda a escribir mejor código… pero no añade validaciones mágicas cuando el programa ya está corriendo.

La idea clave: TypeScript solo existe antes de ejecutar

TypeScript opera en tiempo de compilación:

  • Analiza tu código
  • Comprueba tipos
  • Te muestra errores y warnings
  • Genera JavaScript

Y aquí está el truco: cuando se ejecuta tu aplicación, lo que corre es JavaScript. Los tipos, en la mayoría de casos, desaparecen.

Ejemplo: “pero si TypeScript decía que estaba mal…”

Imagina este caso típico: un tipo que promete number, pero le llega un string.

const sum = (a: number, b: number) => a + b

const result = sum("2" as any, 2)
console.log(result) // "22" — concatena en lugar de sumar

En el editor TypeScript se quejaría (con razón). Pero si lo ejecutas en un entorno que permita correr .ts, puede darte un resultado “válido” igualmente. O sea, el runtime no va a detener el programa por ti.

¿Por qué pasa? Porque en runtime no hay tipos

El compilador te avisa antes, pero una vez arrancas tu app:

  • No hay un “policía de tipos” vigilando
  • No existe validación automática
  • Si entra un dato raro, tu código puede romperse o comportarse de forma inesperada

Por eso la lección es: TypeScript no sustituye validar datos.

Entonces… ¿qué hay que hacer? Validar datos en runtime

Si los datos vienen de fuera (usuario, API, DB, archivo, etc.), tienes que comprobarlos en tiempo de ejecución.

Ejemplo simple:

function parseInput(input: unknown): number {
  if (typeof input === "number") return input
  if (typeof input === "string") {
    const n = Number(input)
    return Number.isNaN(n) ? 0 : n
  }
  return 0
}

Esto sí protege tu app cuando está corriendo, porque no depende del sistema de tipos, depende de comprobaciones reales.

Usa el Playground para verlo clarísimo

Una forma muy visual de interiorizarlo es el Playground oficial de TypeScript:

  • A la izquierda escribes TypeScript
  • A la derecha ves el JavaScript que realmente se ejecuta

Y ahí se ve rápido que TypeScript no añade validaciones extra por defecto: solo traduce y borra tipos.

Lo que hemos aprendido

  • TypeScript actúa en compilación, no en tiempo de ejecución.
  • En runtime se ejecuta JavaScript, y los tipos normalmente desaparecen.
  • Aunque TypeScript te avise, tu app puede “funcionar” igual y fallar en producción si entran datos inválidos.
  • La solución es validar datos en runtime cuando vienen del exterior.

Con esto en mente, TypeScript deja de ser “magia” y pasa a ser lo que es: una herramienta brutal para prevenir errores antes de que ocurran, pero que exige que tú sigas siendo responsable de los datos en ejecución.