TS中any与unknwon的区别
文章类型:TypeScript
发布者:admin
发布时间:2023-03-06
any完全不受类型系统的约束,彻底放弃了类型检查,unknown类型相较于any更加严格,在执行大多数操作之前,会进行某种形式的检查,保证类型安全
区别一:
1:any类型是一种非常宽松的类型,接受任何类型的赋值,可作为任何类型的参数传递。any类型的变量可以随意赋值和操作,但是也存在类型安全的隐患,可能会导致代码中出现难以发现的错误
2:unknown类型则相对严格一些,它表示一个未知的类型。与any类型不同,unknown类型的变量只能被赋值为unknown或任意类型(any),但不能被直接操作或者传递给其他函数。需要在使用之前进行类型检查,确保类型的正确性
const value2: any = 123
const value3: unknown = 456
区别二:使用函数返回值时,any类型和unknown类型也有区别
1:any类型表示函数返回值不受限制,可以是任何类型
2:使用unknown类型表示函数返回值的类型未知,需要先进行类型判断
function foo(): any {
return 'bar';
}
const result: number = foo(); // 不会报错,但存在隐患
function bar(): unknown {
return 'baz';
}
const result: string = bar(); // 报错,需要进行类型判断
function bar(): unknown {
return 'baz';
}
const result: string = typeof bar() === 'string' ? bar() : '';
区别三:类型系统上
1:any类型是所有类型的超集,即任何类型都可以转换为any类型
const value: number = 123;
const value2: any = value; // 可以将number类型转换为any类型
const value3: unknown = value; // 不可以将number类型直接转换为unknown类型
const value4: unknown = value as unknown; // 需要进行类型转换