TypeScriptファイルに「厳密な使用」が必要ですか?


126

TypeScriptコードファイルの "use strict"行をどこに配置するかに関する投稿を見てきました。私の質問は、なぜそれがまったくないのですか?

TypeScriptはすでに強く型付けされた言語なので、「use strict」は何を追加しますか?



12
指定したリンクは、JavaScriptファイルでの「厳密な使用」の目的を定義します。私の質問は、TypeScriptおよびTypescript対応のエディターが「厳密な使用」がキャッチする問題のほとんど/すべて(?)をキャッチするTypeScriptファイルでそれがまだ有用/必要かどうかです。
DeborahK 2015

ES6にビルドしてからBabelのようなものを使用する場合にも必要になります。生成されたスクリプトを含める必要があります"use strict";
BrunoLM

TSファイルに含めないでください。フラグをtsconfig.json --alwaysStrict:Parseに厳密モードで追加し、各ソースファイルに対して「use strict」を
発行し

回答:


107

アップデート

  • TypeScript 1.8+:"use strict";モジュールで発行されます(続きを読む)。
  • TypeScript 2.1+:--alwaysStrictコンパイラオプションは、すべてのファイルをストリクトモードで解析し"use strict"、すべての出力ファイルの上部に出力します(詳細)。

TypeScriptのテストで「instrictモード」を検索すると、いくつかの例のリストを見つけることができます。

次の場合にのみコンパイル時エラーをスローするコードの例をいくつか示します"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でのミスを防ぐのに役立つとは思えません。ファイルに追加されるノイズが原因で、ファイルを作成する手間が省けます。とは--alwaysStrictいえ、TS 2.1 以降では、コードのメンテナンスオーバーヘッドなしにわずかに厳密さを追加するため、コンパイラオプションを有効にします。


TypeScript単体テストがこれをカバーしていることはすばらしいことです。確かめます。例をありがとう。そして、TypeScriptの「コーディング標準」にそれを含めないことに同意します。
DeborahK 2015

外部モジュールを使用する場合use strict、TSファイルの先頭で宣言された文字列は、ファイルの先頭ではなくモジュール関数に表示される可能性があるため、セマンティクスをわずかに変更することに注意してください。
billc.cn 2015

私のマシンでは、TypeScript 1.4は、ECMAScript 5以降をターゲットにすると、使用していない場合でも8進数リテラルを許可しません"use strict;"
Jeremy

18

私のお金では、はい"use strict";TypeScriptファイルに含める必要があります。

Typescriptのコンパイル時の影響を無視して、生成されたJavaScriptが実行されると"use strict";ランタイムに影響がある可能性があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.