تم إطلاق TypeScript 5.5: ما الجديد في هذا الإصدار
في 14 يونيو 2024، أعلن فريق Microsoft رسميًا عن إصدار TypeScript 5.5 — وهو أحد أهم إصدارات أداة كتابة الأنواع الثابتة الشهيرة لـ JavaScript. في هذا التحديث الجديد، لم يحصل المطورون على إصلاحات للأخطاء فحسب، بل حصلوا أيضًا على مجموعة من الميزات القوية التي تبسط كتابة الكود وتعزز الأداء. دعنا نستعرض أبرز المستجدات.
التصريحات المعزولة (Isolated Declarations)
أكثر ما كان متوقعًا في TypeScript 5.5 هو الدعم التجريبي لوضع Isolated Declarations. الآن يمكن للمُجمّع (compiler) إنشاء ملفات التصريحات (.d.ts) لكل وحدة (module) بشكل مستقل، دون الحاجة إلى تحميل المشروع بأكمله. هذا مفيد بشكل خاص للمستودعات الأحادية الكبيرة (monorepos) وعمليات البناء حيث يصبح تسريع عمل المُجمّع أمرًا بالغ الأهمية. يمكن تفعيل هذا الوضع عبر العلامة --isolatedDeclarations في ملف tsconfig.json.
- تسريع البناء: تسمح الترجمة المعزولة للأنواع بتوزيع العملية على عدة مسارات وتقليل وقت الانتظار.
- سهولة للمكتبات: يمكن لمؤلفي الحزم الآن إنشاء أنواع محدثة بشكل أسرع.
- التوافق مع الإصدارات السابقة: الوضع الجديد لا يكسر الكود الموجود، ويمكن تطبيقه تدريجيًا.
التحكم في تسرب الذاكرة في الإغلاقات (Closures)
أصبح TypeScript 5.5 قادرًا على التحذير من تسرب الذاكرة المحتمل المرتبط بالإغلاقات. يقوم المُجمّع الآن بتحليل ما إذا كان الإغلاق يحتفظ بمراجع غير ضرورية لكائنات كبيرة أو عناصر DOM. على سبيل المثال:
function setupHandler() { const largeData = new Array(1000000).fill('x'); document.getElementById('btn')?.addEventListener('click', () => { console.log('clicked'); // سابقًا، لم يكن المُجمّع يحذر من بقاء largeData في الذاكرة });}الآن، سيقوم TypeScript بإصدار تحذير إذا اكتشف أن الإغلاق يلتقط متغيرات لا تُستخدم داخله، ولكنها تبقى في الذاكرة بسبب ارتباطها بمعالج الأحداث. هذا يساعد في كتابة كود أكثر كفاءة دون الحاجة إلى التنميط اليدوي.
استنتاج أنواع محسّن للمصفوفات والتفكيك (Destructuring)
في هذا الإصدار الجديد، تم تحسين آلية استنتاج الأنواع بشكل كبير. أصبح TypeScript 5.5 أكثر دقة في تحديد الأنواع عند تفكيك المصفوفات والمجموعات (tuples). على سبيل المثال، عند العمل مع API يُرجع مجموعات، أصبح المُجمّع الآن يتعرف بشكل صحيح على كل عنصر:
function fetchUser() { return [1, 'Alice'] as const;}const [id, name] = fetchUser(); // id: number, name: string (كان سابقًا union)هذا يلغي الحاجة إلى التعليقات التوضيحية اليدوية الزائدة ويجعل الكود أنظف.
التعريف التلقائي للأنواع من JSDoc
عند استخدام allowJs والتحقق من ملفات JavaScript، تعلم TypeScript 5.5 استنتاج الأنواع تلقائيًا من تعليقات JSDoc حتى في الحالات المعقدة — على سبيل المثال، لدوال الاسترجاع (callbacks) ذات المعاملات المتعددة. هذا مهم بشكل خاص للمشاريع التي تنتقل تدريجيًا من JS إلى TS.
تحسينات وإصلاحات أخرى
- تحسين السرعة: تسريع الترجمة بنسبة تصل إلى 15% للمشاريع الكبيرة بفضل التخزين المؤقت للنتائج الوسيطة.
- علامات جديدة: العلامة
--noUncheckedSideEffectImportsتمنع عمليات الاستيراد دون تأثيرات جانبية إذا لم تُستخدم بشكل صريح. - إصلاح الأخطاء: تم إصلاح أكثر من 80 خطأ متعلقًا بـ