索引访问类型的语法是使用 T[K]
的形式,其中:
T
是一个类型(通常是对象类型)。K
是一个键类型(通常是 T
的属性名的类型)。type Person = {
name: string;
age: number;
isStudent: boolean;
};
// 使用索引访问类型获取 `Person` 中 `name` 的类型
type NameType = Person["name"]; // string
// 使用索引访问类型获取 `Person` 中 `age` 的类型
type AgeType = Person["age"]; // number
索引访问类型可以通过键来动态获取对象类型中的某个属性类型。
type Person = {
name: string;
age: number;
isStudent: boolean;
};
type PropertyKey = "name" | "age";
type PropertyType = Person[PropertyKey]; // string | number
解释:
Person[PropertyKey]
的类型是 string | number
,因为 PropertyKey
可以是 "name"
或 "age"
,对应的类型分别是 string
和 number
。keyof
和索引访问类型你可以结合 keyof
操作符来获取对象的所有键,然后通过索引访问类型提取其对应的值的类型。
type Person = {
name: string;
age: number;
isStudent: boolean;
};
type PersonKeys = keyof Person; // "name" | "age" | "isStudent"
type PersonValues = Person[PersonKeys]; // string | number | boolean
解释:
keyof Person
返回 "name" | "age" | "isStudent"
,表示 Person
类型的所有键。Person[PersonKeys]
表示 Person
类型中所有键对应的值的类型,因此得到 string | number | boolean
。你还可以使用索引访问类型来获取嵌套对象中的属性类型。
type Company = {
name: string;
location: {
city: string;
country: string;
};
};
type CityType = Company["location"]["city"]; // string
解释:
Company["location"]["city"]
通过两次索引访问直接获取了 location
对象中 city
属性的类型。索引访问类型使得 TypeScript 类型系统更为灵活和强大,可以动态地访问和操作复杂对象类型的某些部分。它允许你通过键来提取某个属性的类型,并且可以结合 keyof
等操作符来实现动态和强类型的类型操作。