跳到主要内容

null 和 undefined 类型

摘要:在本教程中,你将了解 TypeScript 中的 nullundefined 类型。

TypeScript nullundefined 类型简介

JavaScript 有两个原始值用于表示不存在或未初始化的值:nullundefined

TypeScript 有两个同名的相应类型。 这些类型的行为方式取决于您是否启用了 strictNullChecks 选项。

strictNullChecks 关闭状态

关闭 strictNullChecks 后,仍可以正常访问可能为 nullundefined 的值,并且可以将值 nullundefined 分配给任何类型的属性。 缺乏对这些值的检查往往是 bug 的主要来源;如果允许的话,建议打开 strictNullChecks

strictNullChecks 开启状态

启用 strictNullChecks 后,当值为 nullundefined 时,需要在对该值使用方法或属性之前测试这些值。就像在使用可选属性之前检查 undefined 一样,我们可以使用缩小范围来检查可能为 null 的值:

function doSomething(x: string | null) {
if (x === null) {
// do nothing
} else {
console.log("Hello, " + x.toUpperCase());
}
}

非空断言运算符 (后缀!)

TypeScript 还有一种特殊的语法,可以从类型中移除 nullundefined,而无需进行任何显式检查。 在任一表达式之后追加一个感叹号 ! 实际上是该值不为 nullundefined 的类型断言:

function liveDangerously(x?: number | null) {
// No error
console.log(x!.toFixed());
}

就像其他类型断言一样,这不会改变代码的运行时行为,因此仅在你确信该值不为 nullundefined 时使用 !

概括

  • nullundefined 默认可以赋值给任何类型的数据。
  • 建议开启 strictNullChecks 以减少潜在的程序缺陷。