- يُعد TypeScript 6.0 آخر إصدار رئيسي لمترجم JavaScript، وهو يُهيئ المشاريع لإصدار TypeScript 7.0 الأصلي القادم القائم على لغة Go.
- يعمل التحديث على تشديد الإعدادات الافتراضية (الوضع الصارم، وأهداف ES الحديثة، ووحدات ESM)، ويضيف واجهات برمجة تطبيقات جديدة للمنصة، ويقدم علامة ترتيب أنواع مستقرة.
- تم إيقاف العديد من الخيارات القديمة وتنسيقات الوحدات النمطية (ES5، AMD/UMD/SystemJS، baseUrl، الدقة الكلاسيكية) تمهيدًا لإزالتها بالكامل في الإصدار 7.0.
- تعد مكاسب الأداء الناتجة عن إعادة كتابة Go بتحسين سرعة البناء بمقدار 7-10 أضعاف تقريبًا، وتقليل استخدام الذاكرة، وتوفير أدوات تحرير أكثر استجابة لقواعد البيانات الكبيرة.

TypeScript 6.0 هو إصدار خاص: ليس مجرد تكرار آخر، مع العلم أن آخر جزء كبير تم إنشاؤه حول المترجم الفعلي في JavaScript، نفس الشيء الذي تطور منذ الأيام الأولى للمشروع. ومن هنا، سيتم إطلاق كل التركيز على TypeScript 7.0، وهو إعادة تنفيذ أصلي مكتوب على Go لتقديم مجموعات أسرع بكثير، مع استهلاك أقل للذاكرة وخدمة لغة أكثر تفاعلية في المحررين مثل VS Code.
من الناحية العملية، يعمل TypeScript 6.0 كأداة حماية مدروسة بين السطر 5.9 y la futura 7.0: تعديل العديد من خيارات التجميع الخطية مع الواقع الحديث لنظام جافا سكريبت البيئي، وإدخال قدرات جديدة من النوع وواجهات برمجة التطبيقات القياسية، وفي نفس الوقت يتم تقليل جزء جيد من التسلسل المتراكم على مدار عقد من الزمان (الأهداف القديمة، وأنظمة الوحدات عفا عليها الزمن وأحزمة التكوين التي لن تشعر بها في عام 2026). كل هذا من خلال الحفاظ على الجوهر، نفس نموذج الأنواع التي يعرفها المطورون.
TypeScript 6.0 هو الإصدار الأخير من المترجم الكلاسيكي
لقد أوضحت Microsoft أن TypeScript 6.0 سيكون الإصدار الأخير الأكثر دعمًا حول كود المترجم في JavaScript، والذي يُعرف تاريخيًا باسم "Strada". بدءًا من الإصدار 7.0، أصبحت الشخصية الرئيسية هي الواجهة الخلفية الأصلية الجديدة في Go، وتحمل اسمًا رئيسيًا "Corsa"، وهي متاحة على شكل بناء ليلي وامتداد خاص لـ VS Code الموجه للاختبار الحقيقي.
لا تقوم بإعادة الكتابة بتغيير اللغة التي تريدها، بشرط استخدام التكنولوجيا للتحليل والتحقق، وعندما تحتاج إلى ذلك، قم بإصدار JavaScript. الهدف هو مواجهة المشكلات التي واجهتها في السنوات الماضية: أوقات ترتيب خدمة اللغة في مشاريع كبيرة، والمجموعات التي تستغرق دقائق في CI، واستهلاك الذاكرة المرتفع عندما يختفي حجم الشركة.
نشر الفريق سلاسل من الأداء كانت شديدة العدوانية عند مقارنة المترجم الفعلي بالمواطن الأصلي في مشاريع حقيقية. لقد مر الكود مثل VS Code (الذي يزيد عن 1,5 مليون سطر) حتى 77,8 ثانية في تحليل كامل مع المترجم الكلاسيكي لمدة 7,5 ثانية مع المترجم في Go، ويقرر ما يزيد عن 10 مرات أسرع. كاتب مسرحي، مع 356.000 سطر، من 11,1 ثانية إلى 1,1، وTypeORM، مع 270.000 سطر من 17,5 إلى 1,3.
لا تتضمن هذه الأرقام فقط إنشاءات أسرع في CI؛ كما يمكنك أيضًا تغيير تجربة اليوميات في المحرر. في مجموعة VS Code الخاصة بها، تتراوح مدة ترتيب خدمة اللغة من 9,6 ثانية إلى 1,2 ثانية تقريبًا، مع تقليل الذاكرة إلى حد كبير. بالنسبة للعديد من المعدات، هذا يعني أنك لن تقبل بشكل خاطئ مثل "العادي" في انتظار عدة ثوان كل مرة لفتح المحرر أو تنفيذ شيك كامل مع tsc --noEmit.
لا يقتصر الأداء الجيد على مجرد تجميع التعليمات البرمجية الأصلية، ولكن أيضًا القدرة على استخدام مؤشرات الترابط المتعددة مع ذاكرة مقسمة. يمكن للمترجم في Go موازنة التحليل داخل مشروع واحد، كما يمكنه أيضًا الحصول على تجميع العديد من المشاريع بالتوازي عندما يتم تضمين مراجع المشروع والطريقة --build. تم دمج كل ذلك مع تطبيق جديد للتجميعات المتزايدة.
¿لماذا يمكنك إعادة كتابة TypeScript باللغة Go وعدم الصدأ بلغة أخرى؟
أحد القرارات الأكثر تعليقًا أدى إلى اختيار Go كلغة للمترجم الجديد، بدلاً من Rust، وC++ وخيارات أخرى مرتبطة عادةً بالأداء العالي. يمكن أن تستسلم النظرة الأولى لكل شيء في النظام البيئي الذي تمت إعادة كتابة العديد من أدوات الجيل الجديد (SWC، oxc، وما إلى ذلك) في Rust.
يحتوي جهاز TypeScript على العديد من الدوافع العملية لهذا الغرض من خلال Go: من أجل يد واحدة، فإن وحدة التخزين الخاصة به تتكيف بشكل جيد مع قوالب تخصيص الذاكرة التي تعرض مترجمًا، مما يقلل من حمل إدارة الذاكرة يدويًا في كود هذه الحالة المكتمل. من ناحية أخرى، يسمح هيكل اللغة ونموذج أنواعها بالنقل المباشر نسبيًا من كود TypeScript الموجود، على النقيض من النمط الأكثر تطفلاً والذي يتطلب نقل كل شيء إلى Rust.
بالإضافة إلى ذلك، هناك الكثير من فلسفة Go الخاصة بها: لغة بسيطة، مع بعض الأشكال "المبدعين" للقيام بنفس الشيء وتوجيه قوي لتوضيح الكود. أثناء العمل على الحفاظ على مشروع نقدي وحياة طويلة كمترجم TypeScript، يتم ترجمته بسهولة بتكلفة صيانة أقل وقاعدة أكواد أكثر سهولة للمتعاونين المستقبليين.
من المؤكد أنه لن يكون هناك عمل نقدي لـ Rust، إلا من خلال التوزيع العملي بين أسلوب Go وثقافة TypeScript. تركز جميع اللغات على إعطاء الأولوية لأن الأشياء "تعمل ببساطة" بشكل يمكن التنبؤ به، وذلك من خلال تجربة استخدام لغة متقدمة أو نماذج ذاكرة متطورة جدًا قد تؤدي إلى تعقيد حياة الفريق اليومية.
بالتوازي مع المترجم، توافق الهجرة أيضًا على اعتماد بروتوكول خادم اللغة (LSP) بشكل أعمق، مما يسهل على المحررين المتميزين الآخرين لـ VS Code التحدث عن نفس "المصطلح" مع الواجهة الخلفية الجديدة والاستفادة من أدائهم دون الاعتماد على عمليات تكامل مخصصة.
ما هو الجديد الذي تم إطلاقه بالفعل مع TypeScript 6.0 اليوم
مع كل الاهتمام الوسيط الذي يتم من خلاله تجميع المترجم في Go، يقدم TypeScript 6.0 تغييرات حقيقية ومرئية في يوم بعد يوم، حول كل شكل من أشكال القيم الجديدة المعيبة، وتحسينات الأنواع، والتخصيص باستخدام أحدث مواصفات JavaScript. الفكرة هي أنه عندما يصل إلى 7.0، يكون الانتقال هو الأكثر سلاسة الممكنة لأن معظم المشاريع قد تم قبولها بقواعد اللعبة الجديدة.
أحد التغييرات النجمية هو أن الوضع مقيد (strict) تم تفعيله بسبب العيب. خلال السنوات الماضية، نوصي بالكثير من الأدلة لترتيب أي مشروع جدي مع "strict": true, ولكن الشجاعة بسبب العيب تسير على ما يرام false. 6.0 افترض أن معظم التطويرات الحديثة تفضل نموذجًا من الأنواع الأكثر إلحاحًا، واحتفظ بخيار إلغاء التنشيط للحالات التي يتم فيها الإضافة بشكل صريح "strict": false en tsconfig.json.
يتم أيضًا تحديث الإعدادات الافتراضية المرتبطة بالوحدات والهدف. الشجاعة الجديدة للعيب دي module es esnext، مما يشير إلى أن النظام البيئي قد تم تفريغه بشكل نهائي بواسطة ESM كتنسيق رئيسي، وذلك مباشرة عبر Node.js والمتصفحات الحديثة أو عبر التنقل عبر حزمة. في وقت واحد، إل target ضمنيًا، أصبح إصدار ECMAScript أحدث إصدار يدعمه TypeScript هذا العام (في الواقع es2025)، وهي حركة تفترض الوجود الشامل لأوقات التشغيل دائمة الخضرة وتساعد على تحسين المنصات القديمة مثل ES5.
حداثة أخرى مهمة هي ذلك noUncheckedSideEffectImports لقد تم تنشيطه الآن بسبب الخلل. يساعد هذا الخيار على اكتشاف الواردات التي يتم تنفيذها فقط من خلال تأثيراتك الثانوية، وتخفي القائمة الأخطاء النوعية أو التبعيات التي يجب في الواقع الرجوع إليها بشكل واضح في الكود. قم بتنشيط سلسلة رفع قائمة أقوى المشاريع الجديدة.
بدلا من ذلك، الخيار libReplacement تم إلغاء التنشيط بسبب خلل لأنه، في كثير من الأحيان، عدد كبير من المشاريع، لن يكون هناك أي فائدة في تهيئة أجزاء أخرى، ومع ذلك، ستتم إضافة تكلفة حقيقية على شكل قرارات خاطئة للوحدات. مع الاتجاه العام نحو التبسيط وعدم الدفع بما لا تستخدمه، فقد أدى ذلك إلى إطلاق العنان لمشروع يحتاجه الضمير.
طرق الاستدلال والأسلوب: أقل حساسية للسياق والوظائف بدون هذا
بالإضافة إلى تعديلات التكوين، يتضمن TypeScript 6.0 تغييرات مثيرة للاهتمام مثل أنواع أقل من بعض المستفيدين الذين يعانون من مشكلات. يمكن للحالة الكلاسيكية أن تتنقل حرفيًا للكائن باستخدام طرق حيث تحتوي إحدى الوظائف على معلمات بدون ملاحظة وتعتمد على الصنف العام المشتق من جزء آخر من الممتلكات، مما يمكنك من اتباع ترتيب المفاتيح.
على وجه الخصوص، تحتوي الوظائف المكتوبة مع تركيب الطريقة على معلمة this يعني ضمنيًا أن المترجم يقوم بمعالجة عمليات الاسترجاعات هذه على أنها "معقولة في السياق". عندما يتم استنتاج أنواع عامة والحصول على نوع سياقي في الاتجاهات التالية، فإن TypeScript تقترح عمليات الاسترجاعات هذه في وقت الاستدلال، وتنتهي بالتسويق مثل ذلك unknown يتم تحديد المعلمات التي يتم تحديدها بشكل مثالي من خلال أجزاء أخرى من نفس الكائن حرفيًا.
في الإصدار 6.0، أخذ المترجم في الاعتبار أن الوظيفة ليست معقولة في السياق إذا كانت المعلمة this لن يتم استخدامه في جسدك. بهذه الطريقة، تم الإعلان عن وظيفة كطريقة ولكن لا يجب الرجوع إليها this إذا كانت العملية تشبه إلى حد كبير وظيفة السهم، فهي تسمح بالحصول على معلومات مفيدة للاستدلال على الأنواع، بشكل مستقل عن ترتيب الممتلكات في الكائن.
يقوم هذا بضبط تقليل فئة أخطاء النوع المربكة من خلال أداة التثبيت عن طريق معلمة مخفضة مثلها unknown لا يعني ذلك الكثير من Bien por qué. إذا تم إجراء تغيير مريح في بيئة العمل بشكل نقي: نموذج الأنواع لا يتغير، إلا أن الاستدلال الاستدلالي أفضل مما يتوقعه معظم المطورين أن يحدث في هذه الحالات بذكاء.
يتم استيراد المسار الفرعي مع التحديد #/ وتحسين دقة الوحدات
تم تطوير TypeScript 6.0 يوميًا مع دعم استيراد المسار الفرعي بناءً على أحدث مواصفات Node.js. حتى الآن، لإعلان المجال imports en package.json، الاسم المستعار الداخلي لـ debian empezar con # اتبع بعض النص، على سبيل المثال #root o #utils. يؤدي هذا التقييد إلى قدر كبير من التعسف عندما يكون الهدف الوحيد للاسم المستعار هو، من الناحية العملية، تفضيل ثابت لكود الإنتاج.
تسمح الإصدارات الحديثة من Node 20 بتحديد المسارات الفرعية التي يمكن ترتيبها باستخدام #/, نحن نقرر أنه لا يوجد معرف “وسيط” إلزامي. هذا أمر مبسط للغاية، يشبه كثيرًا ما يستخدمه العديد من المطورين مع المجمعات، وهو ما يفضله @/... o #/... كسبب منطقي للمشروع.
يتضمن TypeScript هذا السلوك المتوافق مع طرق دقة الوحدة node20, nodenext y bundler. هذا يعني أن المشاريع قيد الاستخدام "imports": { "#": "./dist/index.js", "#/*": "./dist/*" } en package.json يمكنك الآن الاستمتاع بالإكمال التلقائي وفحص الأنواع المتماسكة بالطريقة التي تقوم بها العقدة بحل هذه المسارات.
أفضل ممارسة أخرى هي إمكانية الجمع --moduleResolution bundler مع --module commonjs. Hasta ahora, la resolución bundler كانت محدودة بالوحدات esnext o preserve، ولكن مع انخفاض قيمة --moduleResolution node (الاسم المستعار node10)، تتطلب العديد من قواعد التشفير التي ستصدرها CommonJS طريقة ترحيل معقولة. هذه المجموعة المكعبة بدقة هي اللون.
النطاق الجديد –stableTypeOrdering والإعداد للتوازي في 7.0
أحد التغييرات الهيكلية الأكثر عمقًا للمترجم الأصلي في 7.0 هو اعتماد نموذج تحليل موازٍ حقيقي، حيث يمكن للعديد من "العمال" إعادة تصحيح شجرة التركيب ورسم الأنواع المتوازية. هذا يثير مشكلة غريبة: إذا كانت المعرفات الداخلية للأنواع والرموز تعتمد على الترتيب الذي يتم اكتشافه، فقد لا تتغير النتيجة عندما يتم تحديد ترتيب الزيارة تمامًا.
في المترجم الحالي، تتلقى الأنواع معرفًا متزايدًا حسب الطلب الذي يتم اكتشافه، ويتم استخدام هذه المعرفات، بين أشياء أخرى، لترتيب الاتحادات وقوائم الممتلكات. هذا موضح لماذا في 5.x ترتيب نوع واحد 100 | 500 podía invertirse a 500 | 100 إذا كنت تقدم حرفيًا ثابتًا 500 antes que cualquier mención a 100 في الملف.
في الإصدار 7.0، أصبحت هذه الطريقة غير مقبولة، لأن التنفيذ المتوازي قد يؤدي إلى توليد أوامر مختلفة لنفس البرنامج من خلال العمليات المختلفة. تم تصميم خوارزمية ترتيب محددة بناءً على محتوى الكائنات من النوع والرمز بعيدًا عن ترتيب الاستكشاف. وبهذه الطريقة، سيتم طباعة نفس الاتحاد دائمًا على نفس الشكل (100 | 500، على سبيل المثال)، بشكل مستقل عن كيفية إعادة كتابة الكود.
لمساعدة الأجهزة على اكتشاف التناقضات قبل الترحيل، يقدم TypeScript 6.0 الخيار --stableTypeOrdering. بعد التنشيط، يتبنى المترجم الكلاسيكي نفس استراتيجية ترتيب الأنواع التي تستخدم 7.0، مما يقلل من تأثيرها على مقارنة النتائج بين الإصدارات المختلفة، خاصة في ملفات التصريح المنبعثة ورسائل الخطأ.
نضع في اعتبارنا أن --stableTypeOrdering لديك تكلفة أداء كبيرة، مع تسريع يصل إلى 25% في بعض المشاريع. يتم استخدام التوصية الرسمية على شكل تكتيك خلال مراحل الهجرة أو إزالة الاختلافات، وليس كتكوين دائم في جميع أنحاء العالم.
أهداف جديدة وواجهات برمجة تطبيقات للنظام الأساسي: es2025 وTemporal وupsert وRegExp.escape
يشتمل الإصدار TypeScript 6.0 على الهدف ومجموعة المكتبات es2025 الكثير ل target كما لو أن lib. لم يقدم Aunque ES2025 إنشاءات جديدة للغة، حيث قام بتوحيد واجهات برمجة التطبيقات المتنوعة التي تم تجميعها في الحالة النهائية في عملية التقييس، مثل RegExp.escape، طرق جديدة في Promise، colecciones e iteradores.
في هذا المستوى الجديد، هناك بعض التصريحات التي سبق أن عاشت فيها esnext الانتقال إلى es2025بما في ذلك Promise.try، طرق جديدة لـ Iterator y operaciones añadidas a Set. يسمح هذا للمشاريع التي تدعم ببساطة المعايير الموحدة الأحدث باستخدام هذه واجهات برمجة التطبيقات (APIs) دون أن تختار كل المجموعة "التجريبية" esnext.
أحد الأبطال الكبار في الإصدار 6.0 هو دمج أنواع واجهة برمجة التطبيقات المؤقتة، والتي من المتوقع أن تحل محلها Date في جافا سكريبت. مؤقت، في المرحلة 3 وفي طريق دمجه في المنصة، يقدم أنواعًا دقيقة لللحظات، والتواريخ، والساعات، والمناطق الزمنية، والتقويمات، ويتجنب الكثير من الأخطاء الكلاسيكية المرتبطة بنظام التواريخ الفعلي.
يعرض TypeScript أنواع الوقت عندما يتم تحديده esnext o se indica explícitamente "lib": o "esnext.temporal". يمكنك تجربة هذا مع الوقت نفسه في أوقات التشغيل التي تدعمها أو تقوم بتوسيعها، مع دعم الإكمال التلقائي الكامل والتحقق من الأنواع.
الشيء الجديد الآخر الذي يوسع نطاق التجميع هو دعم أنواع الأساليب "الظاهرة" Map y WeakMap: getOrInsert y getOrInsertComputed. تم إضفاء الطابع الرسمي على ECMAScript الذي تم طرحه في المرحلة 4، حيث تم ترميز هذه الأساليب لنمط متكرر للغاية: "إذا كانت موجودة في المفتاح، تستخدم؛ إذا لم تكن، أدخل هذه القيمة (o نتيجة هذه الوظيفة) وتطور".
مع getOrInsert، الكود الذي كان لديه أمان سابقًا has, get, set والتخزين المؤقت يمكن أن يقلل من مكالمة واضحة ونوعية. Y getOrInsertComputed يسمح لك بإعادة حساب القيمة بسبب العيب حتى يتم التأكد من أن المفتاح لم يعد موجودًا، مما يتجنب التكاليف غير الضرورية عندما تتطلب مسارات التنفيذ التراجع بشكل تلقائي.
بالتوازي، 6.0 نوع من الوظيفة الثابتة الجديدة RegExp.escape, تم اقتراحه مرة أخرى بواسطة TC39. توفر هذه الطريقة سلسلة من الإصدارات وتنتج إصدارًا آمنًا للتداخل الحرفي من التعبيرات المنتظمة، وكتابة مطوري الذاكرة الذين يرغبون في الهروب وتقليل خطر الثغرات الأمنية أو الأخطاء في البحث عن النصوص.
تحديثات DOM والمكتبات العالمية: dom.iterable متكامل وإعادة تكوين المكتبة
مكتبة DOM من TypeScript تتلقى أيضًا فرصة في اليوم في الإصدار 6.0الملفات lib.dom.iterable.d.ts y lib.dom.asynciterable.d.ts، والذي تم تضمينه مسبقًا بشكل اختياري بدون دعم Iterable y AsyncIterable, يتم اعتباره الآن جزءًا لا يتجزأ من lib.dom.d.ts.
من الناحية العملية، هذا يعني أنه ليس من الضروري إضافة المزيد "dom.iterable" a La matriz "lib" لكي تتمكن من التكرار مباشرة حول مجموعات DOM مثل ذلك NodeList o HTMLCollection. مع "lib": ببساطة، أي منطق في عالم حيث أن المتصفحين الذين لا يدعمون التكرارات غير موجودين عمليًا.
إذا كان المشروع قد أعلن عنه dom كما dom.iterable، يمكنك تبسيط التكوين الخاص بك دون فقدان الوظيفة. تظل أسماء المكتبات الإضافية صالحة، لكن أرشيفاتها الفرعية قد مرت على فراغ لأن كل المحتوى الخاص بها قد تم دمجه مع المكتبة الرئيسية على الويب.
تغيير أكثر إثارة يؤثر على الميدان types de compilerOptions en tsconfig.json. Hasta ahora, cuando types لا يوجد حد محدد، يتم مسح TypeScript node_modules/@types ويتضمن ذلك شكلاً ضمنيًا جميع حزم الأنواع المتاحة، وإدخال إجراءات رمزية للمجال العالمي @types/node, @types/jest والحزم الأخرى، حتى الكود لا يتم استيراده مباشرة.
وينطوي هذا السلوك على تكلفة مهمة في المشاريع الكبيرة أو الأحادية حيث يمكن أن تتعايش قرون من التبعيات العابرة للأنواع، بالإضافة إلى تقديم ruido والصراعات المحتملة بين التعريفات العالمية التي لا حاجة لها في الواقع. في 6.0، الشجاعة من أجل العيب types pasa a ser un array vacío [].
النتيجة العملية هي أنه، بدءًا من الآن، يجب أن تعلن المشاريع صراحةً أن حزم الأنواع العالمية ترغب في شحنها، على سبيل المثال "types": . ترى الكثير من المعدات أن وقت التجميع الخاص بها أفضل بشكل معقول (ما بين 20% و 50% حسب البيانات التي تشاركها Microsoft) وذلك ببساطة للتخلص من الشحنات العشوائية من الأنواع التي لم يتم استخدامها.
لمن يحتاج إلى الحفاظ على السلوك القديم لـ "شحن كل شيء"، في حالة وجود خيار الشحن "types": ، مما يؤدي إلى إعادة تنشيط التعداد الكبير @types. ومع ذلك، فإن التوصية القوية للفريق تكون انتقائية وتدرج فقط الحزم الأساسية، من أجل الأداء والتنبؤ.
يقوم rootDir وtsconfig وغيرها من أدوات ضبط السلوك
التغيير الآخر ذو الصلة في التكوين المعيب هو الدلالة الجديدة rootDir. قبل ذلك، عند الإشارة إلى ذلك على سبيل المثال، تستنتج TypeScript مصدر المشروع باعتباره الدليل المشترك الذي يحتوي على جميع ملفات الدخول غير المعلنة. يُلزم هذا المُجمِّع بتحليل مسارات جميع الملفات مسبقًا، بما في ذلك البدء في المُحرر، وتعقيد المنطق، وزيادة التكلفة.
في 6.0، الشجاعة من أجل العيب rootDir انتقل إلى الدليل ببساطة عندما تعيش tsconfig.json. Solo en el caso de ejecutar tsc بعد أن يتم تطبيق خط الأوامر بدون ملف التكوين على الاستدلال لاستنتاج المصدر من ملفات الإدخال.
إذا كان المشروع هو ما يعني أن المصدر المشترك لرمزك موجود، على سبيل المثال، على سبيل المثال ./src وتوقع أن يتم تجميع الملفات المجمعة مباشرة ./dist، الآن يمكن أن تواجه مع rutas como ./dist/src/index.js. يتم توضيح الحل من خلال تكوين شيء ما "rootDir": "./src" y ajustar el patrón de include بالتالي.
يوجد أيضًا تغيير بسيط ولكن مهم في سلوك CLI عندما يتم استدعاؤه tsc مع أسماء أرشيفية في دليل يحتوي على ملف واحد tsconfig.json. الآن، يتم تجاهل ملف التكوين بصمت، مما يولد الكثير من الارتباك حول الخيارات التي يتم تطبيقها بالفعل. بدءًا من الإصدار 6.0، ينتج عن هذا خطأ واضح، مصحوبًا برسالة مفادها tsconfig.json لا يتم الشحن أثناء تصفح الملفات عبر خط الأوامر.
إذا كانت النية تتجاهل ذلك بالضرورة tsconfig.json وتجميع أرشيفات بشكل مخصص، يوجد علم جديد --ignoreConfig تم إلغاء تنشيط هذا الخطأ ثم قم بتشغيله tsc مع قيمها الخاصة المعيبة، دون دمجها مع تكوين المشروع.
الإهمال الرئيسي: ES5 وأنظمة الوحدات الكلاسيكية وbaseUrl والمزيد
يتكون أحد الأجزاء المستدامة من TypeScript 6.0 من تمييز مثل العناصر القديمة أو إزالة الخيارات والميزات مباشرةً التي لا تتداخل مع واقع النظام البيئي. يمكن "إسكات" كل هذه الإهمال في 6.0 متوسطًا "ignoreDeprecations": "6.0" في التكوين، لكن رسالة Microsoft واضحة: في الإصدار 7.0 من الوجود.
في المكان الأول، قم بتجاهل الهدف es5، والذي كان وقتًا طويلاً للغاية لدعم المتصفحات القديمة مثل Internet Explorer. مع اختفاء IE والهيمنة المطلقة للمتصفحات دائمة الخضرة، فإن قاعدة المستخدمين التي تتطلب اليوم ES5 كنتيجة أولية متبقية. الحد الأدنى الجديد يمكن الوصول إليه es2015، ومن يحتاج إلى ES5 سيتعين عليه تكرار أداة خارجية إضافية لخفض المستوى.
Relacionado con esto, la bandera --downlevelIteration بيرد سينتدو و سي ماركا كذلك مهملة. كان هذا الاقتراح الوحيد هو التحكم في دلالات التكرارات من خلال ES5؛ لا تحتوي الأهداف الحديثة على تأثير ما، حيث أن أي استخدام لها في 6.0 يؤدي إلى إلغاء الإعلان.
من خلال شحن الوحدات، بعد أن دعمت القيم amd, umd, systemjs y none للخيار module. ترتكز هذه التنسيقات على الأساسيات في العصور السابقة من خلال الاعتماد الكبير على الإدارة السليمة بيئياً والحزم الحديثة، ولكن سيتم تنفيذها الآن في مشاريع جديدة. إذا كان التطبيق يعتمد عليهم جميعًا، فسيتم ترحيل التوصية إلى وحدات ECMAScript وتفويض أي توافق تاريخي في حزمة واحدة أو أداة مخصصة، أو الاستمرار مؤقتًا في الإصدار 5.x.
وبالمثل، --moduleResolution node (أيضا يسمى node10) Y --moduleResolution classic حد ذاتها تعلن عفا عليها الزمن لصالح دي nodenext y bundler. يشير العرض الأول إلى دقة السلوك الفعلي لـ Node.js في مادة حل الوحدات (بما في ذلك شروط التصدير، وpackage.json الحديثة، وما إلى ذلك)، بينما يُقصد بالجزء الثاني سيناريوهات تهيمن عليها أدوات الحزم والحزم وغيرها من الأدوات المشابهة.
أحد الإهمال الأكثر تأثيرًا الذي يمكن أن يحدث في التكوينات الموجودة هو فقدان baseUrl مثل آلية البحث عن الوحدات. تم استخدامه تاريخيًا للتحضير paths, ولكن يتم اعتباره أيضًا مصدرًا للبحث العام الذي يستورد "المحلل" الذي يتم تشغيله في وقت التنفيذ في الواقع. في 6.0 تم القضاء على الحيوان baseUrl واستبدالها بالمدخلات paths صريحة مع المسار الكامل، أو إضافة راحة "*": فقط في حالة ما إذا كنت ترغب في أن تكون هذه سلوكيات تربية افتراضية.
يؤدي أيضًا إلى فقدان إمكانية الفجر esModuleInterop y allowSyntheticDefaultImports a false. على مدار سنوات، تم تفعيل التكوين الموصى به لهذه الخيارات لتجنب المفاجآت عند استيراد وحدات CommonJS من كود ESM. مع الإصدار 6.0، يفترض المترجم أنه يعيب طريقة "التشغيل البيني الآمن" ويلزم بضبط الواردات التي تعتمد على الدلالة القديمة، على سبيل المثال تغيير النمط الاستيرادي import * as express from "express"; بواسطة import express from "express";.
العلم alwaysStrict يمكنك أيضًا إلغاء التنشيط. من خلال التأثيرات العملية، يتم اعتبار كل التعليمات البرمجية مقتصرة على جافا سكريبت، والتي تؤثر بشكل أساسي على استخدام الكلمات المحفوظة مثل await, static, public o private مثل المعرفات في الكود “غير المقيدة” أو بعض الأدوات حول قيمة this في الوظائف. يجب على الحالات التي تعتمد اليوم على هذه الخاصية إعادة الهيكلة.
Por último, se elimina --outFile كخيار لتسلسل إدخالات متعددة في ملف واحد يتم إخراجه فقط. منذ أن تم اعتماد العديد من المشاريع في هذا اليوم من خلال حزم مثل Webpack أو Rollup أو esbuild أو Vite أو Parcel أو الحفاظ على حزمة صغيرة في TypeScript، فلن تعتبر انعكاسًا جيدًا. يتطلب الاستخدام استخدام أداة مغلفة في خط الأنابيب الخاص بك.
تغييرات التركيب والتوجيهات: مساحات الأسماء وتأكيدات الاستيراد وlib no-default
بالإضافة إلى خيارات المترجم، يتخلص TypeScript 6.0 أيضًا من بعض إنشاءات التركيبات الوراثية التي تتعارض مع تطور JavaScript المستقبلي. إحدى الحالات البارزة هي استخدام الكلمة الرئيسية module للإعلان عن مساحات الأسماء، زي الإصدارات الأولى من اللغة.
منذ الآن، أصبحت الطريقة الموصى بها للإعلان عن مساحات الأسماء هي الكلمة namespaceفي حين module إذا كنت ماركاندو كما عفا عليها الزمن والمحررين. Con 6.0, ese uso de module اعتبرها غير صالحة بشكل مباشر، بين الأشياء الأخرى من أجل مشاريع مستقبلية وحدات نمطية يمكن لـ JavaScript الدخول في تجميع مفاهيمي مع هذا التركيب القديم.
لا يؤثر هذا على إعلانات الوحدات الخارجية declare module "paquete" { ... }، que siguen soportadas تماما. Solo se prohíbe el patrón module Foo { ... } يتم استخدامها كما لو كانت تحتوي على مساحة اسم كلاسيكية تحتوي على أغشية.
الجزء الآخر الذي يتم تحديده وفقًا للمعايير هو التخلي عن تركيب "تأكيدات الاستيراد" المستندة إلى الكلمة الرئيسية asserts. يحتوي العرض الأصلي للشركة TC39 المتطورة على "سمات الاستيراد" التي تتضمن الكلمة with أون سو لوغار. بالنتيجة، التعبيرات مثل import data from "./file.json" asserts { type: "json" } الآن يتم تحديده كخطأ ويجب إعادة كتابة الاستخدام with.
أخيرًا، توجيه الشرطة المائلة الثلاثية /// <reference no-default-lib="true"/> deja de ser soportada. يتم استخدام هذا التعليق للإشارة إلى عدم الحاجة إلى تحميل المكتبات القياسية بشكل خاطئ، ولكن دلالاتها كانت مربكة وتم وضعها بشكل خاطئ. ومع ذلك، نوصي باستخدام أعلام واضحة مثل ذلك --noLib o --libReplacement اعتمادًا على التأثير المطلوب.
في نطاق تحليل JavaScript باستخدام JSDoc، وافق المترجم الأصلي أيضًا على تبسيط دعم المستفيدين الخاصين مثل @enum o @constructor. على الرغم من أن هذا قد تم تحديده بشكل أكبر في الإصدار 7.0، فإنه ينصح بأن العديد من الميزات "المرتبطة" من النوع في أرشيفات .js ستسمح بالتشغيل بنفس الطريقة ويمكن أن تكون أكثر الأخطاء التي تم الإبلاغ عنها، بحيث تتضمن توثيق الأنواع بشكل أكثر وضوحًا.
في التزامن، يعيد TypeScript 6.0 تصميم جزء كبير من تحسينات التكوين والتوافق المتراكم على مدار أكثر من عقد من الزمن للتكيف مع النظام البيئي من خلال ESM، والمتصفحات دائمة الخضرة، والمحزمات الحديثة والأنواع الحصرية وفقًا للمعايير، بعد ظهور المسار الصحيح للمترجم الأصلي في يمكنك استكشاف أقصى قدر من التوازي وتقديم تجربة تطوير أسرع بكثير دون حذف التاريخ الأخير.
