TypeScript 3.0

保留关键字 unknown

unknown 现在是一个保留类型名称,因为它现在是一个内置类型。为了支持新引入的 unknown 类型,取决于你对 unknown 的使用方式,你可能需要完全移除变量申明,或者将其重命名。

未开启 strictNullChecks 时,与 null/undefined 交叉的类型会简化到 null/undefined

关闭 strictNullChecks 时,下例中 A 的类型为 null,而 B 的类型为 undefined

  1. type A = { a: number } & null; // null
  2. type B = { a: number } & undefined; // undefined

这是因为 TypeScript 3.0 更适合分别简化交叉类型和联合类型中的子类型和超类型。但是,因为当 strictNullChecks 关闭时,nullundefined 都被认为是所有其他类型的子类型,与某种对象类型的交集将始终简化为 nullundefined

建议

如果你在类型交叉的情况下依赖 nullundefined 作为单位元,你应该寻找一种方法来使用 unknown 而不是无论它们在哪里都是 nullundefined

参考