keyof T,索引类型操作符。对于任何类型T,keyof T的结果为T上已知的公共属性名的联合。
type Person = {
name: string;
age: number;
sex: string;
};
type Test = keyof Person;
// Test: "name" | "age" | "sex"
例子:定义一个get方法获取对象data的属性值
const data = {
a: 1,
b: 2,
c: 3,
};
// 普通get方法(缺点:无法确定返回类型,无法对key做约束)
function get(obj: object, key: string) {
return obj[key];
}
// 利用keyof约束实现get方法
function get<T extends object, K extends keyof T>(obj: T, key: K): T[K]{
return obj[key];
}
get(data, 'a'); // 因为做了类型约束,第二个参数只能传入a,b,c 否则报错