TypeScript 中的严格空值检查与对象类型详解
1. 严格空值检查
在处理可能未定义的值时,使用字面量的窄化联合类型的强大之处尤为明显,这一领域在 TypeScript 的类型系统中被称为严格空值检查。TypeScript 是众多采用严格空值检查来修复可怕的“十亿美元错误”的现代编程语言之一。
1.1 “十亿美元错误”
“十亿美元错误”是一个形象的行业术语,指的是许多类型系统允许在需要其他类型的地方使用空值。在没有严格空值检查的语言中,像下面这样将 null
赋值给字符串类型的代码是被允许的:
const firstName: string = null;
TypeScript 编译器有许多选项可以改变其运行方式,其中一个非常有用的可选选项 strictNullChecks
用于切换是否启用严格空值检查。大致来说,禁用 strictNullChecks
会为代码中的每个类型添加 | null | undefined
,从而允许任何变量接收 null
或 undefined
。
当 strictNullChecks
选项设置为 false
时,以下代码被认为是完全类型安全的,但实际上存在问题,因为 nameMaybe
在访问 .toLowerCas