索引访问类型的语法是使用 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 等操作符来实现动态和强类型的类型操作。