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

我曾经看到过关于在 TypeScript 代码文件中放置“ use strong”行的帖子。我的问题是,为什么会有这个?

既然 TypeScript 已经是一种强类型语言,那么“使用严格”会增加什么呢?

62299 次浏览

最新情况

  • 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编译器选项,因为它增加了轻微的额外的严格性,而没有任何代码维护开销。

在我看来,是的"use strict";应该包含在 TypeScript 文件中。

不考虑 "use strict";对 TypeScript 的 编译时影响,当执行生成的 JavaScript 时,可能会有 运行时间影响:

  • MDN 标识性能改进 ,以避免在函数调用中装箱 this,并删除 function.callerfunction.arguments属性。

  • Mozilla 的 Jeff Walden 也暗示了在 这个答案中获得性能提升的机会。