"ใช้อย่างเข้มงวด" จำเป็นในไฟล์ TypeScript หรือไม่


126

ฉันเคยเห็นโพสต์เกี่ยวกับตำแหน่งที่จะใส่บรรทัด "ใช้อย่างเข้มงวด" ในไฟล์โค้ด TypeScript คำถามของฉันคือทำไมมีเลย?

เนื่องจาก TypeScript เป็นภาษาที่พิมพ์ยากอยู่แล้ว "ใช้แบบเข้มงวด" จึงเพิ่มอะไร



12
ลิงก์ที่คุณให้ไว้จะกำหนดสิ่งที่ "ใช้อย่างเข้มงวด" ในไฟล์ JavaScript คำถามของฉันคือยังคงมีประโยชน์ / จำเป็นในไฟล์ TypeScript หรือไม่ซึ่งตัวแก้ไขที่เปิดใช้งาน TypeScript และ typescript จะตรวจจับปัญหาส่วนใหญ่ / ทั้งหมด (?) ที่ "ใช้อย่างเข้มงวด" จะจับได้
DeborahK

คุณจะต้องใช้มันเช่นกันหากคุณสร้างมันเป็น ES6 จากนั้นใช้บางอย่างเช่น Babel ต้องใช้สคริปต์ที่สร้างขึ้นเพื่อให้มี"use strict";
BrunoLM

อย่าใส่ไว้ในไฟล์ TS ให้เพิ่มแฟล็กใน tsconfig.json --alwaysStrict: แยกวิเคราะห์ในโหมดเข้มงวดและปล่อย "ใช้อย่างเข้มงวด" สำหรับไฟล์ต้นฉบับแต่ละไฟล์
Drenai

คำตอบ:


107

อัพเดท

  • 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ตัวเลือกคอมไพเลอร์เนื่องจากเพิ่มความเข้มงวดเพิ่มเติมเล็กน้อยโดยไม่มีค่าใช้จ่ายในการบำรุงรักษาโค้ด


เจ๋งตรงที่การทดสอบหน่วย TypeScript ครอบคลุมถึงเรื่องนี้ ฉันจะตรวจสอบให้ ขอบคุณสำหรับตัวอย่าง และฉันยอมรับว่าจะไม่รวมไว้ใน "มาตรฐานการเข้ารหัส" สำหรับ TypeScript ของเราอีกต่อไป
DeborahK

โปรดทราบว่าหากคุณใช้โมดูลภายนอกuse strictสตริงใด ๆ ที่ประกาศไว้ที่ด้านบนของไฟล์ TS อาจปรากฏขึ้นภายในฟังก์ชันโมดูลแทนที่จะอยู่ที่ด้านบนของไฟล์ดังนั้นจึงเปลี่ยนความหมายเล็กน้อย
billc.cn

บนเครื่องของฉัน TypeScript 1.4 ไม่อนุญาตให้ใช้ตัวอักษรฐานแปดเมื่อกำหนดเป้าหมาย ECMAScript 5 หรือสูงกว่าแม้ว่าจะไม่ได้ใช้งานก็ตาม"use strict;"
Jeremy

18

สำหรับเงินของฉันใช่ ,"use strict";ควรรวมอยู่ในไฟล์ typescript

เมื่อไม่คำนึงถึงผลกระทบของเวลาคอมไพล์ของ"use strict";บน typescript อาจมีผลกระทบต่อรันไทม์เมื่อเรียกใช้จาวาสคริปต์ที่สร้างขึ้น:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.