TypeScript中,可以使用索引类型来表示对象的属性类型。要告诉TypeScript object[foo]
的类型是所有可能的 object.prop
类型的子集,可以使用索引类型查询和索引访问操作符。
具体步骤如下:
object[foo]
的类型。这个泛型类型将接受一个字符串类型的参数,表示对象的属性名。type SubsetType<T, K extends keyof T> = T[K];
keyof
来获取 object.prop
的所有可能属性名。type PropKeys<T> = keyof T;
[]
和泛型类型 SubsetType
来获取 object[foo]
的类型。type SubsetTypeOfFoo<T, K extends keyof T> = SubsetType<T, K>[];
object[foo]
的类型是所有可能的 object.prop
类型的子集。function getSubsetTypeOfFoo<T, K extends keyof T>(obj: T, prop: K): SubsetTypeOfFoo<T, K> {
return obj[prop];
}
这样,当调用 getSubsetTypeOfFoo
函数时,TypeScript 将根据传入的对象和属性名,推断出 object[foo]
的类型是所有可能的 object.prop
类型的子集。
示例代码:
interface Person {
name: string;
age: number;
address: string;
}
const person: Person = {
name: "John",
age: 30,
address: "123 Street",
};
const nameOrAge: SubsetTypeOfFoo<Person, "name" | "age"> = getSubsetTypeOfFoo(person, "name");
// nameOrAge 的类型为 string[],即 person.name 的类型的子集
const nameOrAddress: SubsetTypeOfFoo<Person, "name" | "address"> = getSubsetTypeOfFoo(person, "address");
// nameOrAddress 的类型为 string[],即 person.address 的类型的子集
推荐的腾讯云相关产品:无
希望以上信息对您有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云