خطأ TypeScript TS2304: cannot find name 'require' — كيفية إصلاحه في 2025

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: "صديقك القديم require أصبح فجأة غير مرئي"

\n\n

أنت تكتب كودًا بلغة TypeScript، كل شيء يسير بسلاسة، وفجأة — بام! المترجم يصدر رسالة جليدية: "TS2304: Cannot find name 'require'". هل هذا مألوف؟ إذا كنت تنتقل من JavaScript إلى TypeScript أو تعمل مع مشاريع Node.js، فبالتأكيد واجهت هذا الشبح. في عام 2025، لا يزال هذا الخطأ في صدارة Stack Overflow (أكثر من 200,000 مشاهدة)، لكن الخبر السار: من السهل التغلب عليه.

\n\n

في هذه المقالة، سنحلل لماذا لا يرى TypeScript الدالة require، وما هي الإعدادات التي تحتاج إلى تعديلها، والأهم من ذلك — كيفية كتابة كود حديث لتنسى هذه المشكلة إلى الأبد. هيا بنا!

\n\n

ما هو TS2304 ولماذا يظهر؟

\n\n

يظهر الخطأ TS2304: Cannot find name 'require' عندما لا يتمكن TypeScript من العثور على تعريف الدالة العامة require. في JavaScript (خاصة في بيئة Node.js)، require هي دالة أصلية لاستيراد الوحدات بأسلوب CommonJS. لكن TypeScript افتراضيًا لا يعرف عن بيئة Node.js. فهو يعتقد أنك تعمل في متصفح، حيث لا توجد دالة require.

\n\n

السيناريو النموذجي:

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

في عام 2025، يستخدم TypeScript (الإصدار 5.x فما فوق) افتراضيًا وحدات ES (import/export). إذا كنت تحاول استخدام require بدون إعدادات صحيحة، فسيحتج المترجم بحق.

\n\n

الأسباب الرئيسية للخطأ:

\n
    \n
  • عدم تثبيت حزمة @types/node — TypeScript لا يعرف عن واجهات برمجة التطبيقات العامة لـ Node.js.
  • \n
  • إعدادات غير صحيحة في tsconfig.json — عدم وجود types: ["node"] أو أن module لا يتوافق مع CommonJS.
  • \n
  • استخدام بناء جملة قديم — في 2025، من الأفضل استخدام import بدلاً من require.
  • \n
  • تعارض بين CommonJS و ESModules — المشروع مهيأ لوحدات ES، لكنك تكتب كودًا بأسلوب CommonJS.
  • \n
\n\n

الطريقة رقم 1: تثبيت @types/node (حل سريع)

\n\n

أبسط وأكثر الطرق شيوعًا — جعل TypeScript "يرى" Node.js. للقيام بذلك، قم بتثبيت حزمة الأنواع:

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

بعد ذلك، أضف إلى tsconfig.json:

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

الآن يعرف TypeScript عن الدالة require، و __dirname، و process، وغيرها من الكائنات العامة لـ Node.js. سيختفي الخطأ.

\n\n

الإيجابيات: سريع، يعمل "فورًا".
\nالسلبيات: تستمر في استخدام بناء جملة CommonJS القديم.

\n\n

الطريقة رقم 2: إعداد moduleResolution و esModuleInterop

\n\n

إذا كنت ترغب في استخدام require في مشروع مهيأ للوحدات الحديثة، أضف الخيارات التالية إلى 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" — نحدد بوضوح أن الكود الناتج سيكون بتنسيق CommonJS.
  • \n
  • "moduleResolution": "node" — نبحث عن الوحدات كما يفعل Node.js (أولاً في node_modules).
  • \n
  • "esModuleInterop": true — يسمح باستيراد وحدات CommonJS عبر import (والعكس).
  • \n
  • "allowSyntheticDefaultImports": true — يسمح بالاستيراد الافتراضي من الوحدات التي ليس لديها تصدير افتراضي.
  • \n
\n\n

مثال على كود يعمل:

\n\n
import express = require('express');\n// أو حتى\nconst express                

المدونات

توصيات الكتب