1. interface P {
    2. name: string;
    3. age: number;
    4. gender: string;
    5. }
    6. class T {
    7. constructor(private info: P) {}
    8. getInfo(key: string) {
    9. return this.info[key]
    10. }
    11. }
    12. const t = new T({
    13. name: 'pw',
    14. age: 18,
    15. gender: 'male'
    16. })
    17. const test = t.getInfo('name'); // 没有 if判断,test是 any
    18. console.log(test);
    1. interface P {
    2. name: string;
    3. age: number;
    4. gender: string;
    5. }
    6. class T {
    7. constructor(private info: P) {}
    8. getInfo<T extends keyof P>(key: T): P[T] {
    9. // T extends name === type T = name
    10. // T extends age === type T = age
    11. // T extends gender === type T = gender
    12. return this.info[key]
    13. }
    14. }
    15. const t = new T({
    16. name: 'pw',
    17. age: 18,
    18. gender: 'male'
    19. })
    20. const test = t.getInfo('name'); // test 的类型判断是正确的了
    21. console.log(test);