2015-07-13 13 views
79

Tôi đã xem các bài đăng về vị trí đặt dòng "sử dụng nghiêm ngặt" trong tệp mã TypeScript. Câu hỏi của tôi là, tại sao lại có nó?"Sử dụng đúng" cần thiết trong tệp TypeScript?

Vì TypeScript đã là một ngôn ngữ được đánh máy mạnh, "sử dụng nghiêm ngặt" thêm gì?

+2

http://stackoverflow.com/questions/1335851/what-does-use-strict-do-in-javascript-and-what-is-the-reasoning-behind-it?rq=1 –

+9

Liên kết bạn cung cấp xác định những gì "sử dụng nghiêm ngặt" là cho trong một tập tin JavaScript. Câu hỏi của tôi là có hay không nó vẫn hữu ích/cần thiết trong một tệp TypeScript, nơi các trình soạn thảo có bật TypeScript và Typecript sẽ bắt được hầu hết/tất cả (?) Của các vấn đề "sử dụng nghiêm ngặt" sẽ bắt được. – DeborahK

+0

Bạn cũng sẽ cần nó nếu bạn đang xây dựng nó cho ES6 sau đó sử dụng một cái gì đó như Babel, nó đòi hỏi các kịch bản được tạo ra để chứa '" sử dụng nghiêm ngặt ";' – BrunoLM

Trả lời

61

cập nhật

  • nguyên cảo 1.8+: "use strict"; được phát ra trong module (Read more).
  • Tùy chọn trình biên dịch TypeScript 2.1+: --alwaysStrict phân tích tất cả các tệp ở chế độ nghiêm ngặt và phát ra "use strict" ở đầu tất cả các tệp được xuất (Read more).

Bạn có thể tìm thấy một danh sách một số ví dụ bằng cách tìm kiếm các bài kiểm tra đánh máy cho "trong chế độ nghiêm ngặt".

Dưới đây là một số ví dụ về mã mà sẽ chỉ ném một lỗi thời gian biên dịch khi bạn "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; 

Có một vài ví dụ khác nơi "use strict"; sẽ ném ra một lỗi duy nhất khi chạy. Ví dụ:

"use strict"; 
delete Object.prototype; 

Cá nhân, tôi không thấy tất cả những điều hữu ích trong việc ngăn cản tôi mắc lỗi và thêm vào tệp khiến tôi không ngại viết. Điều đó nói rằng, bắt đầu từ TS 2.1 tôi sẽ kích hoạt tùy chọn biên dịch --alwaysStrict vì nó bổ sung thêm độ nghiêm ngặt bổ sung mà không cần bất kỳ chi phí bảo trì mã nào.

+0

Thật tuyệt khi các bài kiểm tra đơn vị TypeScript bao gồm điều này. Tôi sẽ kiểm tra. Cảm ơn các ví dụ. Và tôi đồng ý không còn bao gồm nó trong "tiêu chuẩn mã hóa" của chúng tôi cho TypeScript nữa. – DeborahK

+0

Lưu ý rằng nếu bạn sử dụng các mô-đun bên ngoài, bất kỳ chuỗi 'sử dụng nghiêm ngặt nào 'nào được khai báo ở đầu tệp TS có thể xuất hiện ở dạng hàm mô-đun thay vì ở đầu tệp, do đó làm thay đổi một chút ngữ nghĩa. –

+0

trên máy của tôi, TypeScript 1.4 không cho phép octal literals khi nhắm mục tiêu ECMAScript 5 trở lên, ngay cả khi không sử dụng '" sử dụng nghiêm ngặt; "' – Jeremy

9

Đối với số tiền của tôi, , "use strict"; nên được bao gồm trong tệp TypeScript.

Bất chấp thời biên dịch ảnh hưởng của "use strict"; trên nguyên cảo, có khả năng là một runtime tác động khi javascript tạo được thực hiện:

  • MDN identifies performance improvements tránh đấm bốc this trong các cuộc gọi chức năng, và việc loại bỏ trong số các thuộc tính function.callerfunction.arguments.

  • Jeff Walden của Mozilla cũng đã gợi ý về cơ hội đạt được hiệu suất trong this answer.

Các vấn đề liên quan