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
更安全,因为它提供了更严格的类型检查。