类型检查差异
any
类型:对any
类型的值进行任何操作,TypeScript 编译器都不会报错。它绕过了类型检查,几乎等同于关闭了类型系统。
unknown
类型:不能对unknown
类型的值进行任意操作,必须先进行类型缩小(type narrowing),比如类型断言、typeof
检查、instanceof
检查等,将其缩小到更具体的类型后才能安全使用。
使用方式示例
any
类型示例
function logAnyValue(value: any) {
// 这里可以直接对value进行任意操作,编译器不会报错
console.log(value.length);
console.log(value());
}
logAnyValue('hello');
logAnyValue(() => console.log('function'));
unknown
类型示例
function logUnknownValue(value: unknown) {
if (typeof value ==='string') {
// 经过类型缩小后,可以安全使用string类型的属性和方法
console.log(value.length);
} else if (typeof value === 'function') {
(value as () => void)();
}
}
logUnknownValue('world');
logUnknownValue(() => console.log('unknown function'));