Typescript:类型“Number”不能用作索引类型

Rio*_*lku 10 arrays types typescript

在 TypeScript 中,我有一个数组,我将其用作映射来访问另一个对象数组。这是我的代码的一个极其简化的示例:

var mp : Number[] = [1, 2, 0];
var arr : any[] = ['a', 4, /regex/];

console.log(arr[mp[2]])
Run Code Online (Sandbox Code Playgroud)

然而,运行这个会产生:

error TS2538: Type 'Number' cannot be used as an index type.
Run Code Online (Sandbox Code Playgroud)

我在其他地方查看过,但此类错误的其他答案并不涉及像数组和Number. 如果不是Number对象,如何索引数组?

Rio*_*lku 25

TypeScript 有两种基本数字类型: primitenumber和 Object 类型Number。请参阅TypeScript:基本类型之间的差异以获取解释,但简而言之:

JavaScript 具有基本类型(数字、字符串等)和对象类型(数字、字符串等,在运行时显现)的概念。TypeScript 类型 number 和 Number 分别引用它们。

事实上,如果你运行:

console.log(typeof 1);
Run Code Online (Sandbox Code Playgroud)

您会注意到它返回number,而不是Number

如果将映射更改为对象数组number,则代码将编译而不会出现错误。

  • “*TypeScript 有两种数字类型,素数和对象类型数字。*”还有 [BigInt](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/大整数) (4认同)
  • `typeof(1)` 不是必需的,`typeof 1` 是最常用的。这是不必要的括号,使它看起来像一个函数调用,就像输入“return(1)”一样 (2认同)
  • 改为“基本号码类型” (2认同)