جافاسكريبت - هل توجد حاجة لـ "استخدام الوضع الصارم" في ملف TypeScript؟


لقد رأيت منشورات تتحدث عن مكان وضع سطر "use strict" في ملف كود TypeScript. سؤالي هو، لماذا نضعه أصلاً؟

نظرًا لأن TypeScript هي بالفعل لغة قوية التحليل النوعي، فما الذي يضيفه "use strict"؟

الإجابة رقم 1

التحديثات

  • TypeScript 1.8+: "use strict"; يتم إصداره في الوحدات (اقرأ المزيد).
  • TypeScript 2.1+: خيار المترجم --alwaysStrict يقوم بتحليل جميع الملفات في الوضع الصارم ويصدر "use strict" في أعلى جميع الملفات الناتجة (اقرأ المزيد).

يمكنك العثور على قائمة ببعض الأمثلة عن طريق البحث في اختبارات TypeScript عن "في الوضع الصارم".

إليك بعض أمثلة الشيفرة التي ستسبب خطأ أثناء وقت الترجمة فقط عندما تستخدم "use strict";:

// future reserved keyword not allowed as variable name
var let,
    yield,
    public,
    private,
    protected,
    static,
    implements;

// "delete" cannot be called on an identifier
var a;
delete a;

// octal literals not allowed
03;

هناك بعض الأمثلة الأخرى حيث "use strict"; ستؤدي إلى خطأ فقط أثناء وقت التشغيل. على سبيل المثال:

"use strict";
delete Object.prototype;

شخصيًا، لا أجد أنه مفيد للغاية في منعي من ارتكاب الأخطاء في TypeScript، والضوضاء الإضافية التي يضيفها إلى الملف تجعلني لا أشعر بالرغبة في كتابته. ومع ذلك، بدءًا من TS 2.1، سأقوم بتمكين خيار المترجم --alwaysStrict لأنه يضيف صرامة إضافية طفيفة دون أي عبء على صيانة الكود.

الإجابة رقم 2

بالنسبة لي، نعم، "use strict"; يجب تضمينه في ملفات TypeScript.

بتجاهل تأثيرات وقت التجميع لـ "use strict"; على TypeScript، من المحتمل أن يكون هناك تأثير وقت التشغيل عند تنفيذ جافاسكريبت المولدة:

  • تحدد MDN التحسينات في الأداء عند تجنب تغليف this في استدعاءات الدوال، وإزالة خصائص function.caller و function.arguments.

  • أشار جيف والدن من موزيلا أيضًا إلى فرص لتحقيق مكاسب في الأداء في هذا الجواب.