繁体   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