keyof语法结合泛型的用途

如果有一个类,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'; // 报错
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容