¿El archivo .ts de TypeScript no funciona? Solución al error "Unknown file extension"

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: "¿Su archivo .ts no se abre? No está solo"

\n\n

Imagine: está escribiendo código genial en TypeScript, guarda el archivo con la extensión .ts, ejecuta el comando node myfile.ts... y recibe algo como: "Unknown file extension ".ts". ¿Le suena familiar? Si ha mirado en Stack Overflow, sabrá que esta pregunta ha acumulado miles de visitas y cientos de comentarios. El problema es antiguo, pero sigue siendo relevante.

\n\n

En este artículo no solo copiaremos una respuesta de un foro. Analizaremos por qué ocurre esto, cómo solucionarlo y qué hacer para no volver a encontrarse con este error. Aprenderá a configurar correctamente un proyecto TypeScript, usar ts-node y la configuración tsconfig.json. ¡Allá vamos!

\n\n

¿Por qué ocurre el error "Unknown file extension ".ts"?

\n\n

Vayamos al grano. Node.js no entiende los archivos .ts por defecto. Solo reconoce .js, .json, .mjs y .cjs. Cuando escribe node myfile.ts, Node.js intenta ejecutar el código TypeScript como si fuera JavaScript normal, pero se encuentra con una sintaxis que no conoce (por ejemplo, tipos, interfaces, genéricos).

\n\n

El resultado es un error. Pero también hay otra situación: usa ts-node o tsx, pero aún así ve el mismo mensaje. ¿Por qué? Porque en las versiones modernas de Node.js (a partir de la 16) se agregó una verificación estricta de extensiones en package.json, especialmente cuando está configurado "type": "module".

\n\n

Causas principales:

\n
    \n
  • Ejecución directa de node file.ts — Node.js no sabe compilar TypeScript sobre la marcha.
  • \n
  • Falta de ts-node o tsx — no hay una herramienta para la transpilación.
  • \n
  • Configuración incorrecta de tsconfig.json — por ejemplo, no se especificó el módulo o el target.
  • \n
  • Problemas con package.json — si tiene "type": "module", ts-node puede requerir la extensión explícita.
  • \n
\n\n

Solución 1: Usar ts-node (método clásico)

\n\n

La forma más sencilla de ejecutar TypeScript sin compilación previa es usar ts-node. Este paquete compila los archivos .ts en memoria y pasa el resultado a Node.js.

\n\n

Instalación y ejecución

\n
npm install -g ts-node\nts-node myfile.ts
\n\n

Si usa un proyecto local, es mejor instalarlo como dependencia de desarrollo:

\n
npm install --save-dev ts-node\nnpx ts-node myfile.ts
\n\n

Ejemplo de un archivo simple hello.ts:

\n
const greet = (name: string): string => {\n    return `¡Hola, ${name}!`;\n};\n\nconsole.log(greet("Mundo"));
\n\n

Ejecutamos: npx ts-node hello.ts — y vemos en la consola "¡Hola, Mundo!". ¡Funciona!

\n\n

Pero hay un detalle: "type": "module"

\n

Si en su package.json está especificado "type": "module", ts-node puede negarse a funcionar. En ese caso, debe eliminar temporalmente esa línea o usar el flag --esm:

\n
npx ts-node --esm myfile.ts
\n\n

Solución 2: Usar tsx (herramienta moderna)

\n\n

tsx es una alternativa más rápida a ts-node, basada en esbuild. Funciona con ESM de fábrica y no requiere flags adicionales.

\n\n

Instalación:

\n
npm install --save-dev tsx
\n\n

Ejecución:

\n
npx tsx myfile.ts
\n\n

Ejemplo usando características modernas de TypeScript:

\n
// types.ts\nexport interface User {\n    id: number;\n    name: string;\n    email: string;\n}\n\nconst user                

Blogs

Book Recommendations