any
- 含义:
any
是 TypeScript 中的顶层类型,表示可以是任意类型。当一个变量的类型被声明为 any
时,它可以赋值为任何类型的值,并且在访问该变量的属性或调用其方法时,TypeScript 编译器不会进行类型检查。
- 用途:
- 处理动态类型数据,例如从第三方库中获取的数据,这些数据的类型在编译时无法确定。
- 在项目初期进行快速原型开发,暂时不需要严格的类型检查。
- 示例:
let data: any;
data = "Hello";
console.log(data.length); // 正常,因为any类型不进行严格类型检查
data = 123;
console.log(data.toFixed(2)); // 正常,虽然number类型没有length属性,但any类型允许这样调用
never
- 含义:
never
是 TypeScript 中的底层类型,表示永远不会出现的值的类型。它通常用于函数返回值类型,当一个函数永远不会正常返回(例如抛出异常或进入无限循环)时,其返回值类型为 never
。
- 用途:
- 明确表示函数不会正常返回,帮助类型系统进行更准确的推断。
- 在类型保护中,用于缩小类型范围。
- 示例:
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {}
}
// 类型保护示例
function handleValue(value: string | number) {
if (typeof value ==='string') {
console.log(value.length);
} else if (typeof value === 'number') {
console.log(value.toFixed(2));
} else {
const _exhaustiveCheck: never = value;
// 如果有新的类型加入value的联合类型,这里会报错,提醒开发者处理新类型
}
}