Einleitung: "Ihr alter Freund 'require' wird plötzlich unsichtbar"
\n\nSie schreiben in TypeScript, alles läuft geschmeidig, und dann – Peng! Der Compiler gibt eine eiskalte Meldung aus: „TS2304: Cannot find name 'require'“. Kommt Ihnen das bekannt vor? Wenn Sie von JavaScript zu TypeScript wechseln oder mit Node.js-Projekten arbeiten, sind Sie diesem Geist sicherlich schon begegnet. Im Jahr 2025 ist dieser Fehler immer noch in den Top-Trends von Stack Overflow (über 200.000 Aufrufe), aber die gute Nachricht: Er ist leicht zu besiegen.
\n\nIn diesem Artikel analysieren wir, warum TypeScript require nicht sieht, welche Konfigurationen Sie anpassen müssen und – am wichtigsten – wie Sie modernen Code schreiben, um dieses Problem für immer zu vergessen. Los geht's!
Was ist TS2304 und warum tritt er auf?
\n\nDer Fehler TS2304: Cannot find name 'require' tritt auf, wenn TypeScript die Definition der globalen Funktion require nicht finden kann. In JavaScript (insbesondere in der Node.js-Umgebung) ist require eine native Funktion zum Importieren von Modulen im CommonJS-Stil. TypeScript weiß jedoch standardmäßig nichts über die Node.js-Umgebung. Es geht davon aus, dass Sie in einem Browser arbeiten, wo require nicht existiert.
Typisches Szenario:
\n\n// app.ts\nconst express = require('express');\n// ❌ TS2304: Cannot find name 'require'\n\n\nIm Jahr 2025 verwendet TypeScript (bereits Version 5.x) standardmäßig ES-Module (import/export). Wenn Sie versuchen, require ohne korrekte Konfiguration zu verwenden, wird der Compiler zu Recht protestieren.
Hauptursachen des Fehlers:
\n- \n
- Das Paket
@types/nodeist nicht installiert – TypeScript kennt die globalen Node.js-APIs nicht. \n - Falsche Konfiguration der
tsconfig.json–types: ["node"]fehlt odermoduleentspricht nicht CommonJS. \n - Verwendung einer veralteten Syntax – Im Jahr 2025 ist es besser,
importanstelle vonrequirezu verwenden. \n - Konflikt zwischen CommonJS und ESModules – Das Projekt ist auf ES-Module eingestellt, aber Sie schreiben Code im CommonJS-Stil. \n
Methode Nr. 1: Installation von @types/node (schnelle Lösung)
\n\nDer einfachste und gebräuchlichste Weg ist, TypeScript zu ermöglichen, Node.js zu „sehen“. Installieren Sie dazu das Typenpaket:
\n\nnpm install --save-dev @types/node\n\n\nFügen Sie danach in der tsconfig.json hinzu:
{\n "compilerOptions": {\n "types": ["node"]\n }\n}\n\n\nJetzt kennt TypeScript die Funktion require, __dirname, process und andere globale Node.js-Objekte. Der Fehler wird verschwinden.
Vorteile: schnell, funktioniert „out of the box“.
\nNachteile: Sie verwenden weiterhin die veraltete CommonJS-Syntax.
Methode Nr. 2: Konfiguration von moduleResolution und esModuleInterop
\n\nWenn Sie require in einem Projekt verwenden möchten, das auf moderne Module eingestellt ist, fügen Sie in der tsconfig.json die folgenden Optionen hinzu:
{\n "compilerOptions": {\n "module": "commonjs",\n "moduleResolution": "node",\n "esModuleInterop": true,\n "allowSyntheticDefaultImports": true\n }\n}\n\n\n- \n
"module": "commonjs"– gibt explizit an, dass der Ausgabecode im CommonJS-Format vorliegen soll. \n "moduleResolution": "node"– sucht Module wie Node.js (zuerst innode_modules). \n "esModuleInterop": true– ermöglicht den Import von CommonJS-Modulen überimport(und umgekehrt). \n "allowSyntheticDefaultImports": true– erlaubt Standardimporte aus Modulen ohne Standardexport. \n
Beispiel für funktionierenden Code:
\n\nimport express = require('express');\n// oder sogar\nconst express