إن كنت ما تزال على TypeScript 5.5 فأنت متأخر بإصدارين رئيسيين، والفجوة ليست من النوع المعتاد. فقد استبدل TypeScript 7 المصرّف نفسه: لم يعد برنامج JavaScript يفحص أنواع شيفرتك، بل صار ملفًا تنفيذيًا أصليًا مكتوبًا بلغة Go.
وينتج عن ذلك تحسّن كبير جدًا في السرعة ومجموعة حقيقية من التغييرات الكاسرة. وهذا الدليل هو المسار من 5.5 إلى 7، مع التحفّظ الوحيد الذي قد يمنعك من الترقية اليوم مهما رغبت.
ما الذي تغيّر فعلًا
العنوان الأبرز هو السرعة. فالبناء الكامل يعمل عادةً أسرع بـ 8 إلى 12 مرة. وقياس Microsoft على شيفرة VS Code نفسها انتقل من 125.7 ثانية إلى 10.6 — أي نحو اثني عشر ضعفًا — مع انخفاض الذاكرة بنحو 18%.
وهذا ليس تحسينًا هامشيًا. ففي قاعدة شيفرة كبيرة هو الفرق بين فحص أنواع تتجنّب تشغيله وآخر تشغّله مع كل حفظ.
والأهم أن الفاحص نُقل ولم يُعَد كتابته. فقد نقل الفريق التنفيذ القائم إلى Go وأبقى المنطق مطابقًا بنيويًا، ولهذا بقي سلوك فحص الأنواع كما هو عمومًا. فأنت تحصل على المصرّف نفسه منفَّذًا بطريقة مختلفة.
التغييرات الكاسرة
| التغيير | الأثر | ما تفعله |
|---|---|---|
strict مفعّل افتراضيًا | شيفرة كانت تمرّ قد تفشل | فعّل strict على 5.5 أولًا وأصلح هناك |
الهدف الافتراضي esnext | مخرجات مختلفة | حدّد هدفك صراحةً |
حذف الهدف es5 | فشل البناء | ES2015 هو الحد الأدنى الآن |
| حذف AMD و UMD و SystemJS | فشل البناء | انتقل إلى ESM أو CommonJS |
حذف moduleResolution: node10 | فشل البناء | استخدم bundler أو nodenext |
| تحذيرات 6.0 صارت أخطاءً | فشل البناء | مُرّ عبر 6 وامسح تحذيراتها أولًا |
ولاحظ النمط: معظم هذه كانت مهملة في 6.0 وتُصدر تحذيرًا فقط. والقفز من 5.5 إلى 7 دفعة واحدة يحوّل كل تلك التحذيرات إلى أخطاء في اللحظة نفسها، ولهذا تهم الخطوة الوسيطة.
التحفّظ الذي قد يمنعك
هذا ما ينبغي التحقق منه قبل تخطيط أي شيء آخر.
يصدر TypeScript 7.0 دون واجهة برمجية عامة للمصرّف. فأي أداة تقود المصرّف برمجيًا لا تستطيع العمل معه بعد. وعمليًا يشمل ذلك Vue و Astro و Svelte و MDX وقوالب Angular، وكلها تعتمد على تلك الواجهة لفحص أنواع صيغ ملفاتها الخاصة.
فإن كانت حزمتك التقنية تضم أيًا منها، فلا يمكنك الانتقال إلى TypeScript 7 اليوم. والواجهة متوقعة في 7.1.
وهذا ليس هامشًا صغيرًا، إذ يستبعد حصة كبيرة من مشاريع الواجهات الأمامية. تحقّق منه أولًا، فإن انطبق عليك صار بقية الترحيل خطة لاحقة لا عمل هذه الدورة.
مسار الانتقال
الخطوة 1 — فعّل strict وأنت ما تزال على 5.5
// tsconfig.json
{
"compilerOptions": {
"strict": true,
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "bundler"
}
}
افعل هذا أولًا وبشكل منفصل. فوضع strict هو موضع معظم العمل الحقيقي، وتريد ظهور تلك الأخطاء وسلسلة أدواتك ما تزال مستقرة، لا مختلطة بتبديل مصرّف.
الخطوة 2 — رقِّ إلى 6 وامسح كل تحذير
npm i -D typescript@6
npx tsc --noEmit
وتعامل مع كل تحذير إهمال كإصلاح واجب لا نصيحة، فكل واحد تتركه يصبح خطأً صريحًا في 7.
الخطوة 3 — احذف الإعدادات الميتة
احذف أهداف es5 وإعدادات AMD و UMD و SystemJS وmoduleResolution: node10. وإن كان شيء ما يحتاج مخرجات ES5 فتلك صارت مهمة مُجمّع لا مصرّف.
الخطوة 4 — رقِّ إلى 7
npm i -D typescript@7
npx tsc --noEmit
npm run build
وإن نُفِّذت الخطوات من 1 إلى 3 كما ينبغي، فهذه الخطوة هادئة عادةً — وهذا هو المقصود منها.
ما الذي لم يتغيّر
- نظام الأنواع. الأنواع العامة والشرطية والمُسقَطة والاستنتاج — كلها متطابقة.
- صياغتك. لا تغييرات لغوية تتبنّاها.
- نتائج فحص الأنواع. فالفاحص نُقل ولم يُعَد تنفيذه، فتنتج الشيفرة نفسها الأخطاء نفسها.
- تجربة المحرر. أسرع، لكن بالميزات نفسها.
فهذا تغيير في طريقة التنفيذ لا في اللغة، ولست بصدد تعلّم TypeScript جديدة.
هل ترقّي الآن؟
نعم إن كنت على حزمة TypeScript عادية: خدمات Node، أو React مع مُجمّع قياسي، أو مكتبات. فمكسب السرعة كبير وفوري، والتغييرات الكاسرة إعدادات في معظمها.
ليس بعد إن كنت تستخدم Vue أو Astro أو Svelte أو MDX أو قوالب Angular. انتظر واجهة المصرّف في 7.1، واستثمر الوقت في تنفيذ الخطوات 1 إلى 3 لتكون جاهزًا حين تصل.
وفي الحالتين، فعّل وضع strict الآن. فهو أكبر جزء من العمل، وقيمته قائمة بذاتها بمعزل عن أي ترقية، وتنفيذه منفردًا أسهل بكثير من تنفيذه بجوار تبديل مصرّف.
أسئلة شائعة
ما أحدث إصدار من TypeScript؟
TypeScript 7.0. وإن كنت على 5.5 فأنت متأخر بإصدارين رئيسيين، والفجوة تتضمن استبدال المصرّف لا مجرد ميزات لغوية جديدة.
ما الذي تغيّر في TypeScript 7؟
نُقل المصرّف من JavaScript إلى ملف تنفيذي أصلي بلغة Go، فصار البناء الكامل أسرع بنحو 8 إلى 12 مرة بذاكرة أقل بنحو 18%. وإلى جانب ذلك صار strict و esnext افتراضيين، وحُذف الهدف es5 وصيغ AMD و UMD و SystemJS، وصارت تحذيرات 6.0 أخطاءً صريحة.
هل TypeScript 7 أسرع فعلًا؟
بشكل جوهري. فالبناء الكامل يعمل عادةً أسرع بـ 8 إلى 12 مرة، وقياس Microsoft على VS Code انتقل من 125.7 ثانية إلى 10.6 بذاكرة أقل بنحو 18%.
هل أستطيع الترقية إلى TypeScript 7 مع Vue أو Astro؟
ليس بعد. فـ TypeScript 7.0 يصدر دون واجهة برمجية عامة للمصرّف، وهي ما تعتمد عليه Vue و Astro و Svelte و MDX وقوالب Angular لفحص أنواع صيغ ملفاتها. والواجهة متوقعة في 7.1.
هل أنتقل مباشرة من 5.5 إلى 7؟
لا. مُرّ عبر 6 أولًا، فمعظم تغييرات 7 الكاسرة كانت تحذيرات إهمال في 6، والمرور بها يتيح إصلاحها واحدًا تلو الآخر بدل مواجهتها جميعًا كأخطاء دفعة واحدة.
هل ستنكسر شيفرتي على TypeScript 7؟
نظام الأنواع والصياغة لم يتغيرا، فاللغة نفسها لن تنكسر. وما ينكسر هو الإعدادات — أهداف وصيغ محذوفة — والشيفرة التي كانت تمرّ فقط لأن وضع strict كان معطلًا.
لماذا أُعيدت كتابة TypeScript بلغة Go؟
من أجل السرعة. فالملف التنفيذي الأصلي يتجنّب كلفة تشغيل المصرّف كبرنامج JavaScript. وقد نُقل الفاحص بمنهجية من التنفيذ القائم بدل إعادة بنائه، ولهذا بقي السلوك متسقًا.
هل أحتاج تعديل شيفرتي من أجل TypeScript 7؟
عادةً لا، بل ملف tsconfig.json فقط — إلا إن كان وضع strict معطلًا سابقًا، فتوقّع ظهور أخطاء أنواع حقيقية. فعّل strict على إصدارك الحالي أولًا لفصل ذلك العمل عن الترقية.
التعليقات (0)
اترك تعليقًا
لا توجد تعليقات بعد. كن أول من يشارك أفكاره!