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 }
在此示例中,currentLocation
变量被分配给 JSON.parse()
函数返回的对象。
但是,当使用 currentLocation
变量访问对象属性时,TypeScript 也不会进行任何检查:
console.log(currentLocation.x);
输出:
undefined
TypeScript 编译器不会触发任何错误。
any
类型为你提供了一种使用现有 JavaScript 代码库的方法。 它允许你在编译期间逐渐选择引入和退出类型检查。因此,你可以使用 any
类型将 JavaScript 项目迁移到 TypeScript。
TypeScript any:隐式类型
如果声明变量时未指定类型,TypeScript 会假定你使用 any
类型。 此功能称为类型推断。 TypeScript 会猜测变量的类型。 例如:
let result;
在此示例中,TypeScript 会为你推断类型。这种做法称为隐式类型。
请注意,要禁用 any
类型的隐式类型,请将 tsconfig.json
文件中的 noImplicitAny
选项更改为 true
。 你将在后面的教程中了解有关 tsconfig.json
的更多信息。
TypeScript any vs. object
如果使用 object
类型声明变量,则还可以为其分配任何值。
但是,即使该方法确实存在,你也无法调用它的方法。 例如:
let result: any;
result = 10.123;
console.log(result.toFixed());
result.willExist(); //
在此示例中,即使 willExist()
方法在编译时不存在,TypeScript 编译器也不会发出任何警告,因为 willExist()
方法可能在运行时可用。
但是,如果将结果变量的类型更改为 object
,TypeScript 编译器将发出错误:
let result: object;
result = 10.123;
result.toFixed();
错误:
error TS2339: Property 'toFixed' does not exist on type 'object'.
概括
- TypeScript
any
类型允许你存储任何类型的值。它指示编译器跳过类型检查。 - 使用
any
类型来存储在编译时不知道其类型的数值,或者把 JavaScript 项目迁移到 TypeScript 时使用它。