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

2022-08-30 02:37:19

我看过关于在TypeScript代码文件中放置“使用严格”行的帖子。我的问题是,为什么会有它?

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


答案 1

更新

  • 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


答案 2

对于我的钱,是的,应该包含在TypeScript文件中。"use strict";

忽略 对 TypeScript 的编译时影响,在执行生成的 JavaScript 时可能会对运行时产生影响:"use strict";

  • MDN 确定了在避免函数调用中的装箱以及删除 和 属性方面的性能改进。thisfunction.callerfunction.arguments

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