ملف TypeScript .ts لا يعمل؟ حل خطأ "Unknown file extension"

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

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

ابدأ الدورة

مقدمة: "ملف .ts الخاص بك لا يفتح؟ لست وحدك"

\n\n

تخيل: أنت تكتب كودًا رائعًا بلغة TypeScript، وتحفظ الملف بالامتداد .ts، وتشغل الأمر node myfile.ts... وتحصل على رد مثل: "Unknown file extension ".ts". هل هذا مألوف؟ إذا كنت قد ألقيت نظرة على Stack Overflow، فأنت تعلم أن هذا السؤال جمع آلاف المشاهدات ومئات التعليقات. المشكلة قديمة، لكنها لا تزال قائمة.

\n\n

في هذه المقالة، لن نقوم فقط بنسخ إجابة من المنتدى. سنقوم بتحليل لماذا يحدث هذا، كيف يمكن إصلاحه، وماذا تفعل لتجنب مواجهة هذا الخطأ مرة أخرى. ستتعلم كيفية إعداد مشروع TypeScript بشكل صحيح، واستخدام ts-node وإعدادات tsconfig.json. هيا بنا!

\n\n

لماذا يظهر خطأ "Unknown file extension ".ts"؟

\n\n

دعنا نصل إلى الجوهر مباشرة. Node.js بشكل افتراضي لا يفهم ملفات .ts. إنه يعرف فقط .js و .json و .mjs و .cjs. عندما تكتب node myfile.ts، يحاول Node.js بصدق تنفيذ كود TypeScript كـ JavaScript عادي، لكنه يصطدم بتركيب نحوي غير مألوف له (مثل الأنواع، والواجهات، والأجناس).

\n\n

النتيجة هي خطأ. ولكن هناك حالة أخرى: أنت تستخدم ts-node أو tsx، ولكنك لا تزال ترى نفس الرسالة. لماذا؟ لأنه في الإصدارات الحديثة من Node.js (بدءًا من الإصدار 16)، تمت إضافة فحص صارم للامتدادات في package.json، خاصةً عندما يكون "type": "module" موجودًا.

\n\n

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

\n
    \n
  • التشغيل المباشر node file.ts — Node.js لا يستطيع ترجمة TypeScript بشكل فوري.
  • \n
  • عدم وجود ts-node أو tsx — لا توجد أداة للترجمة.
  • \n
  • إعدادات tsconfig.json غير صحيحة — على سبيل المثال، لم يتم تحديد module أو target.
  • \n
  • مشاكل في package.json — إذا كان "type": "module" موجودًا، فقد يتطلب ts-node تحديد الامتداد بشكل صريح.
  • \n
\n\n

الحل 1: استخدام ts-node (الطريقة التقليدية)

\n\n

أسهل طريقة لتشغيل TypeScript بدون ترجمة مسبقة هي استخدام ts-node. هذه حزمة تقوم بترجمة ملفات .ts في الذاكرة وتمرير النتيجة إلى Node.js.

\n\n

التثبيت والتشغيل

\n
npm install -g ts-node\nts-node myfile.ts
\n\n

إذا كنت تستخدم مشروعًا محليًا، فمن الأفضل تثبيته كتبعية تطوير:

\n
npm install --save-dev ts-node\nnpx ts-node myfile.ts
\n\n

مثال لملف بسيط hello.ts:

\n
const greet = (name: string): string => {\n    return `مرحبًا، ${name}!`;\n};\n\nconsole.log(greet("العالم"));
\n\n

نقوم بتشغيله: npx ts-node hello.ts — ونرى في وحدة التحكم "مرحبًا، العالم!". يعمل!

\n\n

لكن هناك تفصيل: "type": "module"

\n

إذا كان في package.json الخاص بك "type": "module"، فقد يرفض ts-node العمل. في هذه الحالة، إما أن تزيل هذا السطر مؤقتًا، أو تستخدم العلم --esm:

\n
npx ts-node --esm myfile.ts
\n\n

الحل 2: استخدام tsx (أداة حديثة)

\n\n

tsx هو بديل أسرع لـ ts-node، مبني على esbuild. يعمل مع ESM بشكل افتراضي ولا يتطلب أعلامًا إضافية.

\n\n

التثبيت:

\n
npm install --save-dev tsx
\n\n

التشغيل:

\n
npx tsx myfile.ts
\n\n

مثال باستخدام إمكانيات TypeScript الحديثة:

\n
// types.ts\nexport interface User {\n    id: number;\n    name: string;\n    email: string;\n}\n\nconst user                

المدونات

توصيات الكتب