let value: unknown = 'hello';
// 直接调用方法会报错,因为 TypeScript 不知道 value 是什么类型
// let result = value.toUpperCase();
// 正确做法:进行类型检查
if (typeof value === 'string') {
let result = value.toUpperCase();
console.log(result);
}
2. 赋值兼容性
any:any 类型的值可以赋值给任何其他类型的变量,其他类型的值也可以赋值给 any 类型的变量。这意味着 any 类型可以打破类型系统的限制,使代码的类型安全性降低。
let anyValue: any = 'hello';
let num: number = anyValue; // 不会报错
let str: string = 'world';
anyValue = str; // 不会报错
unknown:unknown 类型的值只能赋值给 unknown 或 any 类型的变量。如果要将 unknown 类型的值赋值给其他具体类型的变量,需要先进行类型检查或类型断言。
let unknownValue: unknown = 'hello';
// 直接赋值会报错
// let num: number = unknownValue;
// 进行类型断言后可以赋值
let num: number = unknownValue as number;
let anotherUnknown: unknown = unknownValue; // 不会报错
3. 操作限制
any:对 any 类型的值可以进行任意操作,无需进行额外的类型检查。
let anyValue: any = {};
anyValue.someMethod(); // 不会报错,即使 someMethod 不存在