unknown
现在是一个保留类型名称,因为它现在是一个内置类型。为了支持新引入的 unknown
类型,取决于你对 unknown
的使用方式,你可能需要完全移除变量申明,或者将其重命名。
关闭 strictNullChecks
时,下例中 A
的类型为 null
,而 B
的类型为 undefined
:
type A = { a: number } & null; // null
type B = { a: number } & undefined; // undefined
这是因为 TypeScript 3.0 更适合分别简化交叉类型和联合类型中的子类型和超类型。但是,因为当 strictNullChecks
关闭时,null
和 undefined
都被认为是所有其他类型的子类型,与某种对象类型的交集将始终简化为 null
或 undefined
。
如果你在类型交叉的情况下依赖 null
和 undefined
作为单位元,你应该寻找一种方法来使用 unknown
而不是无论它们在哪里都是 null
或 undefined
。