小编典典

“未知”与“任何”

all

unknown根据他们的 wiki,TypeScript 3.0 引入了类型:

unknown 现在是保留类型名称,因为它现在是内置类型。根据您对 unknown 的预期用途,您可能希望完全删除声明(支持新引入的 unknown
类型),或将其重命名为其他名称。

unknown和有什么区别any?我们什么时候应该使用unknownover any


阅读 161

收藏
2022-03-14

共1个答案

小编典典

unknown您可以在PRRC
公告
中阅读更多信息,但其要点是:

[..] 未知哪个是 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
很有用。这迫使用户安全地自省返回值。

2022-03-14