TypeScript 6.0 يكسر التوافقية عن قصد

لقد وصل TypeScript 6.0 وهو يغير كل شيء. يعد هذا الإصدار التحول الأبرز منذ الإصدار 2.x. إذا كنت تعتمد على الإعدادات القديمة، فمن المرجح أن تفشل عملية البناء (build) التالية لديك.

هناك ثلاثة تغييرات رئيسية ستؤدي إلى تعطل الكود الخاص بك:

لماذا يهم هذا الأمر:

وضع التشغيل الصارم (Strict Mode) في السابق، كان عليك تفعيل وضع التشغيل الصارم يدويًا. أما الآن، فقد أصبح هو المعيار الأساسي. ستواجه حوالي 70% من قواعد الكود (codebases) عمليات بناء فاشلة (red builds) على الفور. ستواجه أخطاءً بسبب الخصائص غير المهيأة (uninitialized properties)، وأنواع any الضمنية (implicit any types)، وقيم null غير المفحوصة.

إزالة دعم ES5 لم يعد بإمكانك استهداف ES5 أو ES3 في ملف tsconfig.json. الإعداد الافتراضي الجديد هو ES2025. إذا كنت بحاجة إلى دعم المتصفحات القديمة، فيجب عليك إضافة أداة منفصلة مثل Babel إلى مسار العمل (pipeline) الخاص بك.

حل الوحدات (Module Resolution) لم يعد CommonJS هو الخيار الافتراضي، بل أصبح ESNext. إذا كان مشروع Node.js الخاص بك يعتمد على سلوك CommonJS الضمني، فيجب عليك ضبط إعداد الوحدة (module setting) بشكل صريح في ملف الإعدادات الخاص بك.

كيف تقوم بالهجرة (migrate) دون تعطيل مسار العمل الخاص بك:

  1. راجع إعداداتك (Audit your config) لا تترك الإعدادات للصدفة. أضف قيمًا صريحة لـ strict و target و module في ملف tsconfig.json قبل الترقية.

  2. ثبّت إصدارك (Lock your version) قم بتثبيت إصدار TypeScript الخاص بك في ملف package.json. اختبر عملية البناء الحالية على إصدارك الحالي قبل الانتقال إلى 6.0.

  3. استخدم فرع ميزة (Use a feature branch) قم بتثبيت TypeScript 6.0 على فرع (branch) جديد. قم بتحديث الـ target إلى ES2025 واضبط نوع الوحدة (module type) بوضوح.

  4. أصلح الأنواع تدريجيًا (Fix types incrementally) قم بتشغيل المترجم (compiler) دون إصدار ملفات (emitting files) لرؤية جميع الأخطاء. ركز أولاً على أخطاء strictNullChecks و implicit any.

  5. اختبر كل شيء (Test everything) قم بتشغيل مجموعة الاختبارات الكاملة الخاصة بك. يلتقط TypeScript أخطاء الأنواع، ولكن اختباراتك تلتقط أخطاء المنطق الناتجة عن الصرامة الجديدة.

يعد TypeScript 6.0 الخطوة الأخيرة قبل إعادة كتابة الإصدار 7.0. سيستخدم الإصدار 7.0 نواة مكتوبة بلغة Go (Go-native core). وهذا يعني أن دعم الإصدارات القديمة سيختفي تمامًا.

قم بتحديث قواعد الكود الخاصة بك الآن لتجنب حدوث أزمة لاحقًا.

المصدر: https://dev.to/davekurian/typescript-60-launches-strict-mode-by-default-and-drops-es5-support-n31