类型查找,通常称为 Lookup Types,是 TypeScript 中一种利用已知类型的键来查找对应值的机制。通过使用 TypeScript 的索引类型和 keyof 操作符,我们可以根据已知的键获取对象或映射类型中相应的值类型。
以下是一个简单的示例:
interface Person {
name: string;
age: number;
address: string;
}
type PersonKey = keyof Person;
// PersonKey 的类型为 "name" | "age" | "address"
let propertyName: PersonKey = "name";
let propertyValue: Person[typeof propertyName]; // 等价于 Person["name"]
// propertyValue 的类型为 string
在这个例子中,PersonKey
是 keyof Person
的结果,表示 Person
接口的所有属性名的联合类型。然后,通过 Person[typeof propertyName]
,我们可以获取 Person
接口中 propertyName
属性对应的值类型。
Lookup Types
的应用场景主要有两种:
1. 获取对象属性值类型
interface Car {
make: string;
model: string;
year: number;
}
type CarMake = Car["make"]; // 类型为 string
type CarYear = Car["year"]; // 类型为 number
在这个例子中,通过 Car["make"]
和 Car["year"]
,我们可以直接获取 Car
接口中 make
和 year
属性对应的值类型。
2. 从映射类型中获取值类型
type PersonProps = {
name: string;
age: number;
address: string;
};
type Person = {
[K in keyof PersonProps]: PersonProps[K];
};
const person: Person = {
name: "John",
age: 30,
address: "123 Main St",
};
type PersonAddress = Person["address"]; // 类型为 string
在这个例子中,通过使用映射类型 [K in keyof PersonProps]
,我们创建了一个与 PersonProps
类型相同的新类型 Person
。然后,通过 Person["address"]
,我们可以获取 Person
类型中 address
属性对应的值类型。