如果有一个类,new的时候传入一个对象,想要通过index或者key值去获取对象里的某一项内容的时候,又想去推断出返回值的正确的类型,就可以通过keyof语法结合泛型的
语法实现。注意:<T extends keyof Person>(key: T):Person[T]
interface Person{
name: string;
age: number;
gender: string;
}
// keyof 第一次循环
// type T = 'name';
// key: 'name';
// Person['name'];
// keyof 第二次循环
// type T = 'age';
// key: 'age';
// Person['age'];
// keyof 第三次循环
// type T = 'gender';
// key: 'gender';
// Person['gender'];
class Teacher {
constructor(private info: Person) { }
getInfo<T extends keyof Person>(key: T):Person[T] {
return this.info[key];
}
}
const teacher = new Teacher({
name: 'yang',
age: 20,
gender: 'male'
});
const test = teacher.getInfo('name');
console.log(test);
原理就是 类型也可以是 一个字符串
// 根据类型也可以是一个字符串,这个特性
type NAME = 'name';
const abc: NAME = 'name';
const abc: NAME = 'hello'; // 报错
网友评论