الحزمتين · فصل ٣

حزمة tsx — تشغيل من غير فحص

esbuild · tsx watch · --import tsx · TypeError · .tsx
🎯 الهدف: تعرف إن حزمة tsx بتشغّل الملف على Node بسرعة، وإن غلط الأنواع يعدّي لحد ما يقع وقت التنفيذ.

الحزمة بتشغّل

pnpm add -D tsx بيثبت أمر tsx. النسخة اللي اتجرّبت 4.23.15، ووصفها في الحزمة: Node متعزّز بـ esbuild عشان يحمّل TypeScript.

اللي بيحصل جوه:

  • esbuild يشيل الأنواع ويحوّل الملف لـ JavaScript بسرعة.
  • Node يشغّل الناتج.
  • مفيش فحص أنواع. الحزمة مش محتاجة typescript عشان تشتغل، بس من غير tsc الغلط النوعي مش هيتصاد.

أوامرها الأساسية: tsx file.ts، وtsx watch file.ts عشان يعيد التشغيل لما الملف يتغيّر، وtsx --tsconfig لو مسار الـ config مش الافتراضي. ينفع كمان node --import tsx file.ts.

نفس الملف الغلط بيعدّي

على bad.ts من الفصل اللي فات، pnpm exec tsx bad.ts مشتغلش الفحص. الملف اشتغل، ووقع هنا:

TypeError: age.toFixed is not a function

القيمة كانت النص "٣٠"، وtoFixed مش موجودة على النص. tsc كان مسك الغلط قبل التنفيذ برسالة TS2322. tsx ساب الغلط يعدّي.

سرعة tsx جاية من إنها مش بتعمل شغل tsc.

ملف .tsx وenum

Node 26 بيشيل أنواع TypeScript البسيطة من ملف .ts لوحده، من غير حزمة tsx. في حاجات لسه محتاجة الحزمة:

  • الامتداد .tsx: node hi.tsx طلّع ERR_UNKNOWN_FILE_EXTENSION للامتداد .tsx. tsx hi.tsx طبع الناتج عادي.
  • الـ enum: node enum.ts طلّع ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX وقال إن الـ enum مش مدعوم في وضع الشيل بس. tsx enum.ts طبع القيمة s.
enum.ts
enum Size { S = "s", M = "m" }console.log(Size.S);

يعني Node لوحده مش بديل كامل لحزمة tsx، وtsx مش بديل لفحص tsc.

خلّصت الفصل لما

🧠 اختبر نفسك
١) tsx عدّى ملف فيه number والقيمة نص. ده معناه الأنواع سليمة؟
لأ. الحزمة مش بتفحص. الغلط ظهر بعدين كـ TypeError لما اتنده toFixed.
٢) ليه node hi.tsx فشل وtsx hi.tsx نجح؟
Node 26 مش بيفهم امتداد .tsx. حزمة tsx بتحوّله وبعدين تسلّمه لـ Node.
٣) --tsconfig في أمر tsx بيعمل typecheck؟
لأ. ده مسار ملف الإعداد للتحويل. الفحص لسه بأمر tsc.