官方定义:keyof该操作符可以用于获取某种类型的所有键,其返回类型是联合类型(keyof的应用多第三方库的源码中常见)
function prop<T extends object, K extends keyof T>(obj:T, key:K){
return obj[key];
}
翻译上面代码:
其中使用了TS泛型和泛型约束。首先定义了T类型并使用extends关键字继承object类型的子类型,然后使用keyof操作符获取T类型的所有键,它的返回 类型是联合 类型,最后利用extends关键字约束 K类型必须为keyof T联合类型的子类型。
下面举例说明:
interface Cass {
age: number;
myName: string;
};
// 或使用下面这种方式定义
// type Xiaoguaishou= {
// age: number;
// myName: string;
// };
// 关于interface和type的区别,请查阅别的文章
const person: Cass = {
age: 6,
myName: "xiaoguaishou",
}
function prop<T extends object, K extends keyof T>(obj:T, key:K){
return obj[key];
}
// 下面这种写法和上面的写法在实际使用中的区别
// 1.输出的结果都是一致
// 2.上面的方式在编码过程就能知道输入的类型是否正确,下面这种方式需要在运行之后
// function prop(obj:Xiaoguaishou, key:string){
// return obj[key];
// }
const age = prop(person, "age");
const myName = prop(person, "myName");
console.log('age====', age);
console.log('myName===', myName);