类型检查
类型检查是验证程序中类型约束是否正确的过程。类型检查既可以在程序编译时进行,即静态类型检查;也可以在程序运行时进行,即动态类型检查。TypeScript 支持静态类型检查,JavaScript 支持动态类型检查。
为了满足不同用户的需求,TypeScript 提供了两种静态类型检查模式:
-
非严格类型检查(默认方式)。
-
严格类型检查。
非严格类型检查
非严格类型检查是 TypeScript 默认的类型检查模式。在该模式下,类型检查的规则相对宽松。例如,在非严格类型检查模式下不会对 undefined
值和 null
值做过多限制,允许将 undefined
值和 null
值赋值给 string
类型的变量。当进行 JavaScript 代码到 TypeScript 代码的迁移工作时,非严格类型检查是一个不错的选择,因为它能够让我们快速地完成迁移工作。
严格类型检查
该模式下的类型检查比较激进,会尽可能地发现代码中的错误。例如,在严格类型检查模式下不允许将 undefined
值和 null
值赋值给 string
类型的变量。启用严格类型检查模式能够最大限度地利用 TypeScript 静态类型检查带来的益处。从长远来讲,使用严格类型检查模式对提高代码质量更加有利,因此建议在新的工程中启用严格类型检查。
TypeScript 提供了若干个与严格类型检查相关的编译选项,例如 --strictNullChecks
和 --noImplicitAny
等。关于严格类型检查编译选项的详细介绍请参考 8.2 节。
在学习 TypeScript 语言的过程中,推荐启用所有严格类型检查编译选项。如果使用 TypeScript 官网提供的在线代码编辑器,那么这些严格类型检查编译选项是默认开启的。如果使用本地开发环境,那么可以在工程的 tsconfig.json
配置文件中启用 --strict
编译选项。示例如下:
{
"compilerOptions": {
"strict": true,
}
}
此例中,将 --strict
编译选项设置为 true
将开启所有的严格类型检查编译选项。它包含了前面提到的 --strictNullChecks
和 --noImplicitAny
编译选项。关于配置文件的详细介绍请参考 8.3 节。
接下来,让我们开始学习 TypeScript 中的类型。