Error TypeScript TS2304: cannot find name 'require' — cómo solucionarlo en 2025

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: «Tu viejo amigo require de repente se volvió invisible»

\n\n

Estás escribiendo en TypeScript, todo va bien, y de repente — ¡pum! El compilador muestra un mensaje gélido: «TS2304: Cannot find name 'require'». ¿Te suena? Si estás migrando de JavaScript a TypeScript o trabajas con proyectos Node.js, seguramente te has topado con este fantasma. En 2025, este error sigue estando en el top de Stack Overflow (más de 200,000 visitas), pero la buena noticia es que es fácil de vencer.

\n\n

En este artículo, analizaremos por qué TypeScript no ve require, qué configuraciones hay que ajustar y — lo más importante — cómo escribir código moderno para olvidar este problema para siempre. ¡Allá vamos!

\n\n

¿Qué es TS2304 y por qué aparece?

\n\n

El error TS2304: Cannot find name 'require' ocurre cuando TypeScript no puede encontrar la definición de la función global require. En JavaScript (especialmente en el entorno Node.js), require es una función nativa para importar módulos al estilo CommonJS. Pero TypeScript, por defecto, no conoce el entorno Node.js. Piensa que estás trabajando en un navegador, donde require no existe.

\n\n

Escenario típico:

\n\n
// app.ts\nconst express = require('express');\n// ❌ TS2304: Cannot find name 'require'\n
\n\n

En 2025, TypeScript (ya en la versión 5.x) utiliza por defecto módulos ES (import/export). Si intentas usar require sin la configuración adecuada, el compilador protesta con razón.

\n\n

Principales causas del error:

\n
    \n
  • No está instalado el paquete @types/node — TypeScript desconoce las APIs globales de Node.js.
  • \n
  • Configuración incorrecta de tsconfig.json — falta types: ["node"] o module no corresponde a CommonJS.
  • \n
  • Uso de sintaxis obsoleta — en 2025 es mejor usar import en lugar de require.
  • \n
  • Conflicto entre CommonJS y ESModules — el proyecto está configurado para módulos ES, pero escribes código al estilo CommonJS.
  • \n
\n\n

Método n.º 1: Instalación de @types/node (solución rápida)

\n\n

La forma más sencilla y común es hacer que TypeScript «vea» Node.js. Para ello, instala el paquete de tipos:

\n\n
npm install --save-dev @types/node\n
\n\n

Después, agrega esto en tsconfig.json:

\n\n
{\n  "compilerOptions": {\n    "types": ["node"]\n  }\n}\n
\n\n

Ahora TypeScript conoce la función require, __dirname, process y otros objetos globales de Node.js. El error desaparecerá.

\n\n

Ventajas: rápido, funciona «de fábrica».
\nDesventajas: sigues usando la sintaxis obsoleta de CommonJS.

\n\n

Método n.º 2: Configuración de moduleResolution y esModuleInterop

\n\n

Si quieres usar require en un proyecto configurado con módulos modernos, agrega las siguientes opciones en tsconfig.json:

\n\n
{\n  "compilerOptions": {\n    "module": "commonjs",\n    "moduleResolution": "node",\n    "esModuleInterop": true,\n    "allowSyntheticDefaultImports": true\n  }\n}\n
\n\n
    \n
  • "module": "commonjs" — indicamos explícitamente que el código de salida será en formato CommonJS.
  • \n
  • "moduleResolution": "node" — buscamos módulos como Node.js (primero en node_modules).
  • \n
  • "esModuleInterop": true — permite importar módulos CommonJS mediante import (y viceversa).
  • \n
  • "allowSyntheticDefaultImports": true — permite la importación por defecto desde módulos que no tienen exportación por defecto.
  • \n
\n\n

Ejemplo de código funcional:

\n\n
import express = require('express');\n// o incluso\nconst express                

Blogs

Book Recommendations