“Gunakan Ketat” yang diperlukan dalam file TypeScript?

126

Saya telah melihat posting tentang di mana harus meletakkan "gunakan ketat" baris dalam file kode TypeScript. Pertanyaan saya adalah, mengapa harus ada?

Karena TypeScript sudah merupakan bahasa yang diketik dengan kuat, apa yang ditambahkan "gunakan ketat"?

DeborahK
sumber
12
Tautan yang Anda berikan mendefinisikan untuk apa "penggunaan yang ketat" untuk file JavaScript. Pertanyaan saya adalah apakah atau tidak masih berguna / diperlukan dalam file TypeScript di mana editor yang diaktifkan TypeScript dan TypeScript akan menangkap sebagian / semua (?) Dari masalah yang "menangkap ketat" akan menangkap.
DeborahK
Anda juga akan membutuhkannya jika Anda membangunnya ke ES6 kemudian menggunakan sesuatu seperti Babel, itu membutuhkan skrip yang dihasilkan untuk memuat"use strict";
BrunoLM
Jangan memasukkannya ke dalam TS yang diajukan, tambahkan bendera di tsconfig.json --alwaysStrict: Parse dalam mode ketat dan keluarkan "use strict" untuk setiap file sumber
Drenai

Jawaban:

107

Pembaruan

  • TypeScript 1.8+: "use strict";dipancarkan dalam modul ( Baca lebih lanjut ).
  • TypeScript 2.1+: --alwaysStrictopsi kompilator mem-parsing semua file dalam mode ketat dan memancarkan "use strict"di atas semua file yang di-output ( Baca lebih lanjut ).

Anda dapat menemukan daftar beberapa contoh dengan mencari tes TypeScript untuk "dalam mode ketat".

Berikut beberapa contoh kode yang hanya akan menimbulkan kesalahan waktu kompilasi saat Anda "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;

Ada beberapa contoh lagi di mana "use strict";akan membuang kesalahan hanya saat runtime. Sebagai contoh:

"use strict";
delete Object.prototype;

Secara pribadi, saya tidak menemukan itu semua yang berguna untuk mencegah saya membuat kesalahan dalam TypeScript dan kebisingan tambahan yang ditambahkan ke file membuat saya tidak repot-repot menulisnya. Yang mengatakan, mulai di TS 2.1 saya akan mengaktifkan --alwaysStrictopsi kompiler karena menambahkan sedikit keketatan tambahan tanpa overhead pemeliharaan kode.

David Sherret
sumber
Keren bahwa tes unit TypeScript mencakup ini. Saya akan mengeceknya. Terima kasih atas contohnya. Dan saya setuju untuk tidak lagi memasukkannya dalam "standar pengkodean" kami untuk TypeScript.
DeborahK
Perhatikan bahwa jika Anda menggunakan modul eksternal, use strictstring apa pun yang dideklarasikan di bagian atas file TS dapat muncul di dalam fungsi modul alih-alih di bagian atas file, sehingga sedikit mengubah semantik.
billc.cn
di komputer saya, TypeScript 1.4 tidak memungkinkan literal oktal saat menargetkan ECMAScript 5 atau lebih tinggi, bahkan ketika tidak menggunakan"use strict;"
Jeremy
18

Untuk uang saya, ya , "use strict";harus dimasukkan dalam file TypeScript.

Mengabaikan efek waktu kompilasi"use strict"; pada pada ScriptScript, ada kemungkinan dampak runtime ketika javascript yang dihasilkan dijalankan:

  • MDN mengidentifikasi peningkatan kinerja dalam menghindari tinju thisdalam panggilan fungsi, dan penghapusan function.callerdan function.argumentsproperti.

  • Jeff Walden dari Mozilla juga mengisyaratkan peluang untuk peningkatan kinerja dalam jawaban ini .

Jeremy
sumber