我有以下代碼:
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。如何實作這一目標?
打字稿游樂場
uj5u.com熱心網友回復:
該get功能本身需要通用的,因此它可以使用引數的型別。這允許它從Tlike回傳一個特定的鍵T[K]。
K類上的泛型現在不再有意義。keyof T在那個班級的任何地方都是一樣的,所以你可以完全洗掉它。
換句話說,Store因為一個類不認為任何一個鍵是特殊的,所以它不需要一個泛型。但是該get方法需要獲取一個特定的鍵,所以型別系統需要知道哪個特定的鍵,所以你需要一個泛型。
class Store<T> {
constructor(private obj: T) { }
get<K extends keyof T>(key: K): T[K] {
return this.obj[key];
}
}
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/340935.html
上一篇:從3D陣列中檢索值
