跳到主要内容

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 时使用它。