interface P {
name: string;
age: number;
gender: string;
}
class T {
constructor(private info: P) {}
getInfo(key: string) {
return this.info[key]
}
}
const t = new T({
name: 'pw',
age: 18,
gender: 'male'
})
const test = t.getInfo('name'); // 没有 if判断,test是 any
console.log(test);
interface P {
name: string;
age: number;
gender: string;
}
class T {
constructor(private info: P) {}
getInfo<T extends keyof P>(key: T): P[T] {
// T extends name === type T = name
// T extends age === type T = age
// T extends gender === type T = gender
return this.info[key]
}
}
const t = new T({
name: 'pw',
age: 18,
gender: 'male'
})
const test = t.getInfo('name'); // test 的类型判断是正确的了
console.log(test);