TypeScript error TS2304: cannot find name 'require' — comment le corriger en 2025

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : « Votre vieil ami require est soudainement devenu invisible »

\n\n

Vous écrivez en TypeScript, tout se passe bien, et soudain — bam ! Le compilateur affiche un message glacial : « TS2304 : Cannot find name 'require' ». Cela vous dit quelque chose ? Si vous passez de JavaScript à TypeScript ou travaillez sur des projets Node.js, vous avez probablement déjà rencontré ce fantôme. En 2025, cette erreur est toujours en tête sur Stack Overflow (plus de 200 000 vues), mais la bonne nouvelle est qu'elle est facile à vaincre.

\n\n

Dans cet article, nous allons voir pourquoi TypeScript ne voit pas require, quels fichiers de configuration il faut ajuster et — surtout — comment écrire du code moderne pour oublier ce problème pour toujours. C'est parti !

\n\n

Qu'est-ce que TS2304 et pourquoi apparaît-il ?

\n\n

L'erreur TS2304 : Cannot find name 'require' se produit lorsque TypeScript ne trouve pas la définition de la fonction globale require. En JavaScript (notamment dans l'environnement Node.js), require est une fonction native pour importer des modules au style CommonJS. Mais TypeScript, par défaut, ne connaît pas l'environnement Node.js. Il pense que vous travaillez dans un navigateur, où require n'existe pas.

\n\n

Scénario typique :

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

En 2025, TypeScript (déjà version 5.x) utilise par défaut les modules ES (import/export). Si vous essayez d'utiliser require sans une configuration correcte, le compilateur proteste à juste titre.

\n\n

Causes principales de l'erreur :

\n
    \n
  • Le paquet @types/node n'est pas installé — TypeScript ne connaît pas les API globales de Node.js.
  • \n
  • Configuration incorrecte de tsconfig.json — absence de types: ["node"] ou module ne correspond pas à CommonJS.
  • \n
  • Utilisation d'une syntaxe obsolète — en 2025, il est préférable d'utiliser import au lieu de require.
  • \n
  • Conflit entre CommonJS et ESModules — le projet est configuré pour les modules ES, mais vous écrivez du code en style CommonJS.
  • \n
\n\n

Méthode n°1 : Installation de @types/node (solution rapide)

\n\n

La méthode la plus simple et la plus courante est de permettre à TypeScript de « voir » Node.js. Pour cela, installez le paquet de types :

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

Ensuite, ajoutez dans tsconfig.json :

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

Maintenant, TypeScript connaît la fonction require, __dirname, process et d'autres objets globaux de Node.js. L'erreur disparaîtra.

\n\n

Avantages : rapide, fonctionne « prêt à l'emploi ».
\nInconvénients : vous continuez à utiliser la syntaxe obsolète de CommonJS.

\n\n

Méthode n°2 : Configuration de moduleResolution et esModuleInterop

\n\n

Si vous souhaitez utiliser require dans un projet configuré pour les modules modernes, ajoutez les options suivantes dans 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" — indique explicitement que le code de sortie sera au format CommonJS.
  • \n
  • "moduleResolution": "node" — recherche les modules comme Node.js (d'abord node_modules).
  • \n
  • "esModuleInterop": true — permet d'importer des modules CommonJS via import (et vice versa).
  • \n
  • "allowSyntheticDefaultImports": true — autorise l'import par défaut depuis des modules sans export par défaut.
  • \n
\n\n

Exemple de code fonctionnel :

\n\n
import express = require('express');\n// ou même\nconst express                

Blogs

Book Recommendations