परिचय: "आपका पुराना मित्र require अचानक अदृश्य हो गया"
\n\nआप TypeScript में लिख रहे हैं, सब कुछ सुचारू रूप से चल रहा है, और अचानक — बैम! कंपाइलर एक बर्फीला संदेश देता है: "TS2304: नाम 'require' नहीं मिल सका"। परिचित लगता है? यदि आप JavaScript से TypeScript पर स्विच कर रहे हैं या Node.js प्रोजेक्ट्स पर काम कर रहे हैं, तो आपने निश्चित रूप से इस भूत का सामना किया होगा। 2025 में, यह त्रुटि अभी भी Stack Overflow पर शीर्ष पर है (200,000 से अधिक व्यूज़), लेकिन अच्छी खबर यह है: इसे हराना आसान है।
\n\nइस लेख में, हम समझेंगे कि TypeScript require को क्यों नहीं देखता, कौन सी कॉन्फ़िगरेशन बदलनी है और — सबसे महत्वपूर्ण — आधुनिक कोड कैसे लिखें ताकि इस समस्या को हमेशा के लिए भूल जाएँ। चलिए शुरू करते हैं!
TS2304 क्या है और यह क्यों दिखाई देता है?
\n\nत्रुटि TS2304: नाम 'require' नहीं मिल सका तब उत्पन्न होती है जब TypeScript वैश्विक फ़ंक्शन require की परिभाषा नहीं ढूँढ पाता। JavaScript में (विशेष रूप से Node.js वातावरण में), require CommonJS शैली में मॉड्यूल आयात करने के लिए एक मूल फ़ंक्शन है। लेकिन TypeScript डिफ़ॉल्ट रूप से Node.js वातावरण के बारे में नहीं जानता। यह सोचता है कि आप ब्राउज़र में काम कर रहे हैं, जहाँ require मौजूद नहीं है।
सामान्य परिदृश्य:
\n\n// app.ts\nconst express = require('express');\n// ❌ TS2304: नाम 'require' नहीं मिल सका\n\n\n2025 में, TypeScript (पहले से ही संस्करण 5.x) डिफ़ॉल्ट रूप से ES-मॉड्यूल (import/export) का उपयोग करता है। यदि आप सही कॉन्फ़िगरेशन के बिना require का उपयोग करने का प्रयास करते हैं, तो कंपाइलर उचित रूप से विरोध करेगा।
त्रुटि के मुख्य कारण:
\n- \n
- पैकेज
@types/nodeस्थापित नहीं है — TypeScript Node.js के वैश्विक API के बारे में नहीं जानता। \n tsconfig.jsonकी गलत कॉन्फ़िगरेशन —types: ["node"]गायब है याmoduleCommonJS से मेल नहीं खाता। \n - पुराने सिंटैक्स का उपयोग — 2025 में
requireके बजायimportका उपयोग करना बेहतर है। \n - CommonJS और ESModules के बीच संघर्ष — प्रोजेक्ट ES-मॉड्यूल के लिए सेट है, लेकिन आप CommonJS शैली में कोड लिख रहे हैं। \n
तरीका #1: @types/node स्थापित करना (त्वरित समाधान)
\n\nसबसे सरल और सामान्य तरीका TypeScript को Node.js "देखने" देना है। इसके लिए टाइप्स पैकेज स्थापित करें:
\n\nnpm install --save-dev @types/node\n\n\nइसके बाद tsconfig.json में जोड़ें:
{\n "compilerOptions": {\n "types": ["node"]\n }\n}\n\n\nअब TypeScript require, __dirname, process और Node.js के अन्य वैश्विक ऑब्जेक्ट्स के बारे में जानता है। त्रुटि गायब हो जाएगी।
लाभ: तेज़, "बॉक्स से बाहर" काम करता है।
\nनुकसान: आप पुराने CommonJS सिंटैक्स का उपयोग जारी रखते हैं।
तरीका #2: moduleResolution और esModuleInterop कॉन्फ़िगर करना
\n\nयदि आप एक ऐसे प्रोजेक्ट में require का उपयोग करना चाहते हैं जो आधुनिक मॉड्यूल के लिए सेट है, तो tsconfig.json में निम्नलिखित विकल्प जोड़ें:
{\n "compilerOptions": {\n "module": "commonjs",\n "moduleResolution": "node",\n "esModuleInterop": true,\n "allowSyntheticDefaultImports": true\n }\n}\n\n\n- \n
"module": "commonjs"— स्पष्ट रूप से निर्दिष्ट करता है कि आउटपुट कोड CommonJS प्रारूप में होगा। \n "moduleResolution": "node"— मॉड्यूल को Node.js की तरह खोजें (पहलेnode_modules)। \n "esModuleInterop": true— CommonJS-मॉड्यूल कोimportके माध्यम से आयात करने की अनुमति देता है (और इसके विपरीत)। \n "allowSyntheticDefaultImports": true— डिफ़ॉल्ट निर्यात के बिना मॉड्यूल से डिफ़ॉल्ट आयात की अनुमति देता है। \n
कार्यशील कोड का उदाहरण:
\n\nimport express = require('express');\n// या यहाँ तक कि\nconst express