unknown和any的区别

示例

let vAny: any = 10; // 我们可以给any赋任何值  
let vUnknown: unknown = 10; // 我们也可以给unknown赋任何值  
  
let s1: string = vAny; // any可以赋给任何类型  
let s2: string = vUnknown; // 不合法; 我们不能把vUnknown赋给除了它自己和any以外的任何类型(除非显式断言)  
  
vAny.method(); // OK; 任何操作都可以对any进行  
vUnknown.method(); // 不合法; 我们对这个变量一无所知  

在上面的例子中,我们可以看到,any类型的变量可以被赋给任何类型,而且可以对其执行任何操作。但是,unknown类型的变量只能被赋给它自己或any类型,而且在执行任何操作之前,必须先进行类型检查¹。

因此,与any相比,使用unknown更安全,因为它提供了更严格的类型检查。