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

image


any⁠ 和 object⁠ 类型有什么区别?分别会带来什么编译或运行时行为?

any⁠ 类型的变量可以赋值为任何类型,也可以调用任何方法,编译器不会报错;但如果调用不存在的方法,运行时会报错。

let result: any;
result = 10.123;
result.willExist(); // 编译器不会报错,但是运行时会报错

image

object⁠ 类型的变量也可以赋值为对象,但不能直接调用对象的方法,即使该方法存在,编译器也会报错:

let result: object;
result = 10.123;// 编译器直接报错
result.toFixed(); // 编译器直接报错

image

什么时候应该使用 any⁠ 类型?

  • 当你无法在编译时确定变量的类型,比如处理第三方 API 返回的数据或用户输入时;
  • 在将 JavaScript 项目逐步迁移到 TypeScript 时,可以临时使用 ⁠any⁠,然后逐步引入类型检查。

  • 如果你觉得我的工作对你有帮助,可以通过分享这篇文字或者关注同名公众号来支持我,你的支持是我持续创作的最大动力:
    image

  • 转载以及引用请注明原文链接

  • 本博客所有文章除特别声明外,均采用CC 署名-非商业使用-相同方式共享 许可协议。

posted @ 2025-05-27 19:25  Asanwos  阅读(46)  评论(0)    收藏  举报