TypeScript的any类型
TypeScript 的 any 类型是什么?它的作用是什么?
TypeScript 的 any 类型允许在变量声明时跳过类型检查,即这个变量可以被赋予任何类型的值。使用 any 类型后,TypeScript 编译器不会对该变量进行类型检查,这在你不确定变量类型(比如来自第三方 API 或用户输入)时非常有用。可以这样声明和使用 any 类型的变量:
let result: any;
result = 1;
console.log(result);// 输出 1
result = 'Hello';
console.log(result);// 输出 Hello
result = [1, 2, 3];
const total = result.reduce((a: number, b: number) => a + b, 0);
console.log(total);// 输出 6
在这个例子中,result 先后被赋值为数字、字符串和数组,TypeScript 编译器都不会报错。
最后,甚至还可以直接对 result 调用数组方法 reduce,因为类型检查被跳过了。
同时,JavaScript 代码迁移到 TypeScript 提供了灵活性,可以逐步引入类型检查,再看下面这个例子:
// 假设来自第三方 API 的响应结果
const json = `{"latitude": 10.11, "longitude":12.12}`;
const currentLocation = JSON.parse(json);
console.log(currentLocation);
当用 JSON.parse() 解析 JSON 字符串时,TypeScript 会将返回值推断为 any 类型,这也是 TypeScript 的隐式类型。即使你访问一个不存在的属性,TypeScript 也不会报错,只会在运行时输出 undefined:
console.log(currentLocation.x); // 输出 undefined

any 和 object 类型有什么区别?分别会带来什么编译或运行时行为?
any 类型的变量可以赋值为任何类型,也可以调用任何方法,编译器不会报错;但如果调用不存在的方法,运行时会报错。
let result: any;
result = 10.123;
result.willExist(); // 编译器不会报错,但是运行时会报错

object 类型的变量也可以赋值为对象,但不能直接调用对象的方法,即使该方法存在,编译器也会报错:
let result: object;
result = 10.123;// 编译器直接报错
result.toFixed(); // 编译器直接报错

什么时候应该使用 any 类型?
- 当你无法在编译时确定变量的类型,比如处理第三方 API 返回的数据或用户输入时;
- 在将 JavaScript 项目逐步迁移到 TypeScript 时,可以临时使用
any,然后逐步引入类型检查。
-
如果你觉得我的工作对你有帮助,可以通过分享这篇文字或者关注同名公众号来支持我,你的支持是我持续创作的最大动力:
![image]()
-
转载以及引用请注明原文链接。
-
本博客所有文章除特别声明外,均采用CC 署名-非商业使用-相同方式共享 许可协议。

介绍TypeScript的any类型和适用场景。

浙公网安备 33010602011771号