为什么在 TypeScript 中写 `typeof someArray[number]` 是有效的?

问题描述 投票:0回答:1

给定一个接口,我们可以访问其特定密钥类型的属性,例如

string

interface AB {
  a: number;
  b: boolean;
}

type PropertiesByString = AB[keyof AB & string]

这是有效的,因为

keyof AB & string
"a" | "b"
,它们都是
AB
的有效键。同样的逻辑不适用于数组:

const MyArray = [
  { name: "Alice", age: 15 },
  { name: "Bob", age: 23 },
  { name: "Eve", age: 38 },
];
 
type Person = typeof MyArray[number];

代码是有效的,但这里的

number
包括
4
等等。为什么这里允许使用
number

typescript
1个回答
0
投票

使用

number
索引数组类型的特殊方式。

TypeScript 数组类型(与tuple 相比)没有固定长度。

typeof MyArray
只是
{ name: string; age: number; }[]
。运行时变量数组可能包含 3 个项目,但在类型级别上没有相关信息。理论上该数组可以有任意长度。因此,使用
number
进行索引通常比使用全部索引相同类型的随机索引更简洁。

typeof MyArray[4]
typeof MyArray[3]
以及
typeof MyArray[23802302]
均有效。 尝试一下!

© www.soinside.com 2019 - 2024. All rights reserved.