簡體   English   中英

將對象鍵映射到泛型類中的值類型

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM