Sử dụng nghiêm ngặt có cần thiết trong một tập tin TypeScript không?


126

Tôi đã thấy các bài đăng liên quan đến nơi đặ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 có nó ở tất cả?

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



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

Bạn cũng sẽ cần nó nếu bạn đang xây dựng nó thành ES6 sau đó sử dụng một cái gì đó như Babel, nó yêu cầu tập lệnh được tạo để chứa"use strict";
BrunoLM

Đừng đặt nó trong TS, hãy thêm cờ vào tsconfig.json --alwaysStrict: Phân tích cú pháp ở chế độ nghiêm ngặt và phát ra "sử dụng nghiêm ngặt" cho mỗi tệp nguồn
Drenai

Câu trả lời:


107

Cập nhật

  • TypeScript 1.8+: "use strict";được phát ra trong các mô-đun ( Đọc thêm ).
  • TypeScript 2.1+: --alwaysStricttùy chọn trình biên dịch 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 xuất ra ( Đọc thêm ).

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

Dưới đây là một số ví dụ về mã sẽ chỉ đưa ra 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ụ nữa "use strict";sẽ chỉ đưa ra lỗi khi chạy. Ví dụ:

"use strict";
delete Object.prototype;

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


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 ý về việc không còn đưa nó vào "tiêu chuẩn mã hóa" của chúng tôi cho TypeScript.
DeborahK

Lưu ý rằng nếu bạn sử dụng các mô-đun bên ngoài, bất kỳ use strictchuỗi nào được khai báo ở đầu tệp TS có thể xuất hiện bên trong chức năng mô-đun thay vì ở đầu tệp, do đó sẽ thay đổi một chút ngữ nghĩa.
billc.cn

trên máy của tôi, TypeScript 1.4 không cho phép các số bát phân khi nhắm mục tiêu ECMAScript 5 trở lên, ngay cả khi không sử dụng"use strict;"
Jeremy

18

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

Bỏ qua các hiệu ứng thời gian biên dịch"use strict"; trên Bản mô tả, có khả năng có tác động thời gian chạy khi javascript được tạo được thực thi:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.