[英]Map object key to value type in class generic
我有以下代码:
interface Person {
name: string;
age: number;
}
class Store<T, K extends keyof T> {
constructor(private obj: T) { }
get(key: K): T[typeof key] {
return this.obj[key];
}
}
const person: Person = {
name: 'John',
age: 99
};
const store = new Store(person);
const value = store.get('name');
value
类型显示:
const value = store.get('name');
// ^^^^^ value: string | number
如何将对象的键作为类方法中的参数来推断对象的值类型?
在这种情况下,我希望将value
正确键入为string
。 如何实现这一目标?
get
函数本身需要是通用的,以便它可以使用参数的类型。 这允许它从T
返回一个特定的键,比如T[K]
。
类上的K
泛型现在不再有意义。 keyof T
在该类中的任何地方都是相同的,因此您可以完全删除它。
换句话说, Store
as a class 不认为任何一个键是特殊的,所以它不需要一个泛型。 但是get
方法需要获取一个特定的键,所以类型系统需要知道哪个特定的键,所以你需要一个泛型。
class Store<T> {
constructor(private obj: T) { }
get<K extends keyof T>(key: K): T[K] {
return this.obj[key];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.