泛型中keyof的使用
js
interface Person {
name: string
age: number
gender: string
}
class Teacher {
constructor (private info: Person) {}
// 使用extends keyof就能保证
public getInfo<T extends keyof Person>(key: T) {
return this.info[key]// 如果key的类型是string,则return this.info[key]会报错,因为typescript不能保证传入的是name、age、gender中的一个【类型保护机制】
}
}
let tom = new Teacher({
name: 'tom',
age: 18,
gender: 'male'
})
let info = tom.getInfo('name') // 鼠标hover getInfo会提示:getInfo(key: "name" | "age" | "gender"): string | number
console.log(info)