[英]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.