TypeScript 的编译器 tsc 提供了许多选项可以让编译器在编译时进行更严格的检查,从而使得我们编写的代码更安全、更健壮。 不过出于对 JavaScript 和为旧版本 TypeScript 编写的代码的兼容性考虑,这些选项默认都是关闭的,需要手动在命令行上或 tsconfig.json 中指定。

因此,如果想要最高程度的代码检查的话,我们需要一一指定每一个检查选项。

幸运的是,从 TypeScript 2.3 版本开始,tsc 提供了 --strict 选项,指定该选项后,会默认启用一系列(并非全部)更严格的检查,免去了一一指定单独选项的麻烦。

此外,需要注意的是,由于 --strict 选项所包含的检查会随着 TypeScript 版本的升级而增加,因此,在指定了该选项后,有可能导致在当前 TypeScript 版本下能够顺利编译的代码,到了新版本的 TypeScript 上,由于代码检查变得更为严格而无法直接编译通过。

下面是列出了当前所有可用的检查选项,以及 --strict 选项是否会启用这些选项的对照表:

选项 默认值 启用 --strict 后的值 选项最早可用版本
--strict false true 2.3
--alwaysStrict false true 2.1
--strictNullChecks false true 2.0
--noImplicitAny false true 0.9.1
--noImplicitThis false true 2.0
--noImplicitReturns false false 1.8
--noFallthroughCasesInSwitch false false 1.8
--noUnusedLocals false false 2.0
--noUnusedParameters false false 2.0
--forceConsistentCasingInFileNames false false 1.8

关于各选项的具体作用,请参阅 编译选项 · TypeScript中文网Compiler Options · TypeScript

参考文档