unknown根据他们的 wiki,TypeScript 3.0 引入了类型:
unknown
unknown 现在是保留类型名称,因为它现在是内置类型。根据您对 unknown 的预期用途,您可能希望完全删除声明(支持新引入的 unknown 类型),或将其重命名为其他名称。
unknown和有什么区别any?我们什么时候应该使用unknownover any?
any
unknown您可以在PR或RC 公告中阅读更多信息,但其要点是:
[..] 未知哪个是 any 的类型安全对应物。任何东西都可以分配给未知,但未知不能分配给除了它本身和任何没有类型断言或基于控制流的收缩的东西。同样,在未首先断言或缩小到更具体的类型之前,不允许对未知数进行任何操作。
几个例子:
let vAny: any = 10; // We can assign anything to any let vUnknown: unknown = 10; // We can assign anything to unknown just like any let s1: string = vAny; // Any is assignable to anything let s2: string = vUnknown; // Invalid; we can't assign vUnknown to any other type (without an explicit assertion) vAny.method(); // Ok; anything goes with any vUnknown.method(); // Not ok; we don't know anything about this variable
建议的用法是:
很多时候,我们想在 TypeScript 中描述能力最低的类型。这对于想要发出信号“他可以是任何值,因此您必须在使用它之前执行某种类型的检查”的 API 很有用。这迫使用户安全地自省返回值。