TypeScript any 类型详解

在本教程中,你将学习 TypeScript 中的 any 类型,以及如何在代码中正确地使用它。

TypeScript 中地 any 类型介绍

有时候你需要在变量中存储一个值,但在你编写代码的时候你并不知道它的类型,这种未知的值可能来自第三方的 API 或者用户的输入。在这种情况下,如果你希望不进行类型检查,允许它在编译时通过检查,你可以使用 any 类型, any 类型允许你给变量赋任何类型的值:

// json may come from a third-party API
const json = `{"latitude": 10.11, "longitude":12.12}`;

// parse JSON to find location
const currentLocation = JSON.parse(json);
console.log(currentLocation);

输出:

{ latitude: 10.11, longitude: 12.12 }

在这个例子中,JSON.parse() 函数返回的对象赋值给了 currentLocation 变量。当你访问 currentLocation 变量的属性的时候,TypeScript 不会做任何的类型检查:

console.log(currentLocation.x);

输出:

undefined;

上面的例子中,TypeScript 编译器不会抛出任何的错误提示。

TypeScript 的 any 类型提供了一个可以与当前基于 JavaScript 的代码库一起正常工作的方案,它允许你在编译期间是否使用类型检测。因此,你可以借助 any 类型把基于 JavaScript 的项目平滑地过渡成为基于 TypeScript 的项目。

TypeScript 隐式具有 any 类型

如果你在声明一个变量的时候没有指定类型,TypeScript 会假定变量使用的是 any 类型。这个特性被叫做 类型推断。TypeScript 基本上都会进行变量类型的推断,比如:

let result;

在这个例子中,TypeScript 会进行变量的类型推断,这种特性被称为隐式类型。

注意:要禁用 any 类型的隐式类型特性,你需要把 tsconfig.json 文件中的 noImplicitAny 选项的值调整为 true,你在后面的教程中会学习更多关于 tsconfig.json 配置文件的知识。

TypeScript 中的 any 类型 vs 对象类型

let result: any;
result = 10.123;
console.log(result.toFixed());
result.willExist(); //

在这个例子中,result 变量的类型为 any类型,那么即使 willExist() 方法在编译时不存在,调用这个方法的时候 TypeScript 编译器也不会发出抛出任何的错误提示,因为 willExist() 函数可能在运行时是可用的。然而,如果把 result 变量的类型修改为 object 类型,TypeScript 编译器会抛出错误提示:

let result: object;
result = 10.123;
result.toFixed();

错误提示:

error TS2339: Property 'toFixed' does not exist on type 'object'.

小结

教程来源于Github,感谢cody1991大佬的无私奉献,致敬!

技术教程推荐

Service Mesh实践指南 -〔周晶〕

Linux性能优化实战 -〔倪朋飞〕

玩转Spring全家桶 -〔丁雪丰〕

Flutter核心技术与实战 -〔陈航〕

恋爱必修课 -〔李一帆〕

零基础入门Spark -〔吴磊〕

快速上手C++数据结构与算法 -〔王健伟〕

结构思考力 · 透过结构看思考 -〔李忠秋〕

LangChain 实战课 -〔黄佳〕