TypeScript 中的 alwaysStrict

说明 alwaysStrict 为什么会让 TypeScript 以 ECMAScript strict mode 解析文件并输出 use strict,以及它和 strict 的关系。

#tech / dev #resource / typescript #type / concept #status / growing

[!info] related notes

TypeScript 中的 alwaysStrict

一句话定义

alwaysStrict 会让 TypeScript:

  • 按 ECMAScript strict mode 解析文件
  • 并在输出里为每个源文件 emit "use strict"

核心机制 / 工作原理

官方文档的定义非常直接:

  • parsed in the ECMAScript strict mode
  • emit "use strict" for each source file

这说明它同时影响两层:

  • 解析阶段的语义
  • 输出阶段的 strict mode 指令

最小例子 / 最小场景

{
  "compilerOptions": {
    "alwaysStrict": true
  }
}

在这种情况下,TypeScript 会把源码始终当成 strict mode 语境来理解,并在输出 JS 文件顶部加上:

"use strict";

边界与易混淆点

它和 strict 不是同一层

strict 更偏:

  • 类型检查严格性总开关

alwaysStrict 更偏:

  • JavaScript 解析 / emit 时是否处于 ECMAScript strict mode

但它通常跟着 strict 一起开

官方 TSConfig 参考页当前写明:

  • true if strict; false otherwise

所以很多项目并不会单独显式写它。

它更接近运行时语义背景,而不是单纯类型规则

严格模式会影响某些 JavaScript 行为是否抛错、某些静默失败是否变成显式错误。

参考信息

创建于 2026/5/15 更新于 2026/5/27