TypeScript文件中需要“使用严格”吗?


126

我看过有关在TypeScript代码文件中的“使用严格”行放置位置的文章。我的问题是,为什么要这么做?

由于TypeScript已经是一种强类型语言,因此“ use strict”会添加什么?



12
您提供的链接定义了JavaScript文件中“严格使用”的含义。我的问题是,它在TypeScript文件中是否仍然仍然有用/仍需要,其中TypeScript和启用TypeScript的编辑器将解决“使用严格”问题中的大多数/全部(?)问题。
DeborahK,2015年

如果将其构建到ES6,然后使用类似Babel的东西,也将需要它,它需要包含生成的脚本"use strict";
BrunoLM 2015年

不要将其放在TS字段中,在tsconfig.json --alwaysStrict:Parse中以严格模式添加标志,并为每个源文件发出“ use strict”
Drenai

Answers:


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 2015年

请注意,如果使用外部模块,则use strict在TS文件顶部声明的任何字符串都可能出现在模块函数中,而不是在文件顶部,因此会稍微改变语义。
billc.cn 2015年

我的机器上,打字稿1.4不瞄准的ECMAScript 5或更高时,不使用的时候让八进制文字,甚至"use strict;"
杰里米

18

对于我的钱,是的"use strict";应该包括在打字稿文件。

不考虑Typescript 的编译时间影响,执行生成的javascript "use strict";可能会对运行时产生影响:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.