TypeScript 泛型中 keyof 语法的使用

interface Person{
  name: string;
  age: number;
  gender: string;
}

class Teacher{
  constructor(private info: Person) { }
  // getInfo(key: string) {
  //   return this.info[key];
    /**
     * 这里报错是因为,不能保证这个 key 值就一定是 info 里面的 key
     * 比如随表传递 hello ,就会打印出 undefined
     * 所以需要保护机制,结合泛型 的 keyof
     */
  // }

  getInfo<T extends keyof Person>(key: T):Person[T] {
    return this.info[key];
  }
}

const teacher = new Teacher({
  name: 'sssssss',
  age: 18,
  gender: 'male'
})

const test = teacher.getInfo('age');
console.log(test);

 

posted @ 2020-06-30 06:33  wzndkj  阅读(4624)  评论(0编辑  收藏  举报