Skip to content
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待

索引访问类型

我们可以使用索引访问类型来查找另一个类型上的特定属性:

ts
type 
Person
= {
age
: number;
name
: string;
alive
: boolean };
type
Age
=
Person
["age"];
Try

索引类型本身也是一种类型,因此我们可以使用联合类型、keyof 或其他类型:

ts
type 
I1
=
Person
["age" | "name"];
type
I2
=
Person
[keyof
Person
];
type
AliveOrName
= "alive" | "name";
type
I3
=
Person
[
AliveOrName
];
Try

如果你尝试索引一个不存在的属性,你甚至会看到一个错误:

ts
type 
I1
=
Person
["alve"];
Property 'alve' does not exist on type 'Person'.
Try

使用任意类型进行索引的另一个示例是使用 number 来获取数组元素的类型。 我们可以将其与 typeof 结合使用,方便地捕获数组字面量的元素类型:

ts
const 
MyArray
= [
{
name
: "Alice",
age
: 15 },
{
name
: "Bob",
age
: 23 },
{
name
: "Eve",
age
: 38 },
]; type
Person
= typeof
MyArray
[number];
type
Age
= typeof
MyArray
[number]["age"];
// 或者 type
Age2
=
Person
["age"];
Try

索引时只能使用类型,这意味着你不能使用 const 来创建变量引用:

ts
const 
key
= "age";
type
Age
=
Person
[key];
'key' refers to a value, but is being used as a type here. Did you mean 'typeof key'?
Type 'key' cannot be used as an index type.
Try

但是,你可以使用类型别名来实现类似风格的重构:

ts
type 
key
= "age";
type
Age
=
Person
[
key
];
Try