TypeScript 中的 alwaysStrict
说明 alwaysStrict 为什么会让 TypeScript 以 ECMAScript strict mode 解析文件并输出 use strict,以及它和 strict 的关系。
#tech / dev
#resource / typescript
#type / concept
#status / growing
[!info] related notes
- 所属 MOC: TypeScript MOC
- 配置入口: tsconfig 使用详解
- 并列概念: TypeScript 中的 strict, TypeScript 中的 module
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 参考页当前写明:
trueifstrict;falseotherwise
所以很多项目并不会单独显式写它。
它更接近运行时语义背景,而不是单纯类型规则
严格模式会影响某些 JavaScript 行为是否抛错、某些静默失败是否变成显式错误。
参考信息
- TSConfig
alwaysStrict: https://www.typescriptlang.org/tsconfig/alwaysStrict.html - TSConfig Reference: https://www.typescriptlang.org/tsconfig/