第一种:与接口一起用,返回联合类型
interface Person {
name: string;
age: number;
location: string;
}
type K1=keyof Person; // "name" | "age" | "gender"
let a:K1='name'
第二种:与typeof一起用,可以返回对象key的联合类型,也可以和
const TIME_TYPE = {
FIXED_TIME_RANGE: 'FIXED_TIME_RANGE',
DYNAMIC_TIME_RANGE: 'DYNAMIC_TIME_RANGE',
};
let a:keyof typeof TIME_TYPE //'FIXED_TIME_RANGE'|'DYNAMIC_TIME_RANGE'
第三种:与类一起使用
class Person {
name: string = "Semlinker";
getInfo(){
console.log(this.name)
}
}
let sname: keyof Person=‘getInfo’
如果把getInfo写成getInfo1,则会 报下面的错误
第四种:keyof也支持基本数据类型,如下
第五种:在泛型约束中使用类型参数
你可以声明一个类型参数,且它被另一个类型参数所约束。 比如,现在我们想要用属性名从对象里获取这个属性。 并且我们想要确保这个属性存在于对象obj
上,因此我们需要在这两个类型之间使用约束。
function getProperty<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
let x = { a: 1, b: 2, c: 3, d: 4 };
getProperty(x, "a"); // okay
getProperty(x, "m"); //类型“"m"”的参数不能赋给类型“"a" | "b" | "c" | "d"”的参数。