المترجم الجديد لـ TypeScript 7 القائم على لغة Go، والمسمى tsgo، بدأ بالفعل في تعطيل أدوات التطوير الشهيرة مثل ESLint و ts-jest و ts-morph. سيستمر هذا التعطيل حتى تستقر واجهة برمجة التطبيقات (API) البرمجية للمترجم في إصدار 7.1 القادم، مما يعني أن الفرق التي تعتمد على هذه الأدوات يجب أن توقف أي خطط للترقية.
ما الذي تغير في TypeScript 7
قدم هذا الإصدار tsgo، وهو نسخة من فاحص الأنواع (type-checker) مكتوبة بلغة Go، وقد أطلق فريق TypeScript عليه الاسم الرمزي Project Corsa. من خلال نقل النواة من JavaScript إلى Go، يمكن للمترجم تقديم عمليات بناء (builds) أسرع بعشر مرات، وهو عنوان جذب المتبنين الأوائل الذين يتطلعون إلى تقليل الدقائق المستهلكة في خطوط أنابيب CI.
لماذا تفشل الأدوات
الأدوات التي تعمل مع TypeScript لا تتواصل مع فاحص الأنواع مباشرة، بل تستدعي مجموعة من واجهات برمجة التطبيقات (APIs) الداخلية التي تعرض معلومات الأنواع، والتشخيصات (diagnostics)، والتنقل عبر شجرة الإعراب المجردة (AST traversal). تمت إعادة كتابة هذه الواجهات لـ tsgo وهي لا تزال في حالة تغير حتى الإصدار 7.1. والنتيجة هي سلسلة من الانهيارات والإخفاقات الصامتة:
- typescript-eslint – يرفض npm تثبيته جنباً إلى جنب مع TypeScript 7؛ ويؤدي فرض التثبيت إلى ظهور خطأ
TypeErrorفي ESLint. - ts-jest – يحاول استدعاء طرق (methods) داخلية لم تعد موجودة في نسخة Go، مما يؤدي إلى توقف عملية تحويل ملفات الاختبار (test-file transformation).
- ts-morph – يتوقع وجود واجهة برمجة تطبيقات مستقرة للتنقل عبر بنية الكود؛ ومع الواجهة الحالية، قد يعطي نتائج خاطئة أو يفشل دون سابق إنذار.
- Monorepos – يتجاهل tsgo بعض معاملات الأنواع العامة (generic type parameters)، مما يؤدي إلى أخطاء في الأنواع تظهر فقط في المشاريع الكبيرة متعددة الحزم.
أي سير عمل يجمع بين التدقيق (linting)، واختبار Jest، أو تحليل الكود مع TypeScript 7 سيواجه على الأرجح عمليات بناء فاشلة (red builds).
من المتأثر؟
- فرق الواجهة الأمامية (Front-end) التي تشغل ESLint كجزء من كل طلب سحب (pull request).
- خدمات الواجهة الخلفية (Back-end) التي تعتمد على ts-jest لاختبارات الوحدة (unit testing).
- المكتبات التي تستخدم ts-morph لتوليد الكود أو التوثيق.
- المؤسسات التي تستخدم إعدادات monorepo حيث يكون استنتاج الأنواع (type inference) معقداً بالفعل.
إذا تحول خط أنابيب CI الخاص بك إلى اللون الأحمر بعد ترقية TypeScript، فمن المرجح أن يكون السبب أحد الأمور المذكورة أعلاه.
مسار هجرة آمن حتى إصدار 7.1
أبسط طريقة للاستفادة من مكاسب السرعة دون تعطيل الأدوات هي فصل خطوة فحص الأنواع السريعة عن عملية البناء الفعلية:
- ثبّت إصدار TypeScript الرئيسي على 6.x – هذا يحافظ على واجهة برمجة التطبيقات المستقرة التي تتوقعها جميع الأدوات.
- أضف
@typescript/native-previewكاعتماد تطوير (dev dependency) – توفر هذه الحزمة ملف tsgo الثنائي للفحص السريع للأنواع في CI. - قم بتشغيل tsgo مع
--noEmitلإجراء فحوصات سريعة – فهي تتحقق من صحة الأنواع ولكنها لا تنتج ملفات مخرجات. - استخدم مترجم
tscالتقليدي لعمليات البناء الفعلية – لا يزالtscينتج ملفات JavaScript ويحترم واجهة برمجة التطبيقات 6.x.
npm install -D typescript@^6.9
npm install -D @typescript/native-preview
قم بتحديث سكربتات package.json الخاصة بك:
{
"scripts": {
"typecheck:fast": "tsgo --noEmit",
"build": "tsc"
}
}
بهذا الإعداد المزدوج، ستحتفظ بزيادة السرعة بمقدار عشرة أضعاف في CI مع الحفاظ على التوافق مع ESLint و ts-jest و ts-morph.
متى يمكنك الترقية مباشرة إلى 7.0
إذا كان كود المشروع الخاص بك يستدعي tsc فقط — دون تدقيق (linting)، أو Jest، أو ts-morph — فإن واجهة برمجة التطبيقات غير المستقرة لن تؤثر عليك. في هذا السيناريو الضيق، يمكنك الانتقال إلى TypeScript 7 فوراً والاستمتاع بتحسن الأداء دون خطوات إضافية.
أمور يجب مراقبتها
- الإصدار 7.1 – أشار فريق TypeScript إلى أن واجهة برمجة التطبيقات البرمجية سيتم تثبيتها في هذا الإصدار. وبمجرد صدوره، سيختفي الجسر بين tsgo والأدوات الحالية، مما يسمح بترقية نظيفة.
- تحديثات الأدوات – راقب الإصدارات الجديدة من
typescript-eslintوts-jestوts-morph. سيقومون بنشر إصدارات متوافقة بعد صدور 7.1 بفترة وجيزة. - تكوين CI – تذكر استبدال
tsgo --noEmitباستدعاءtscعادي بمجرد استقرار واجهة برمجة التطبيقات؛ فلن تعود هناك حاجة لحزمة المعاينة (preview package).
الخلاصة: حتى يتم تثبيت واجهة برمجة التطبيقات في إصدار 7.1، ابقَ على إصدار TypeScript 6.x للمترجم الرئيسي، وأضف @typescript/native-preview للفحوصات السريعة، واستمر في استخدام tsc لعمليات البناء. هذا يجنبك مشاكل التدقيق والاختبار مع الاستمرار في جني فوائد الأداء من محرك Go الجديد.
