You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript类泛型方法如何根据入参key推断对象对应value类型

问题根源

你当前的写法将K extends keyof T定义为类的全局泛型参数,TypeScript 在实例化 Store 类时就会将K推导为泛型T所有键的联合类型(对应当前示例就是'name' | 'age'),因此后续调用get方法无论传入什么具体键,返回值都会被推导为所有值类型的联合string | number。

解决方案

将泛型参数K的声明从类层级下移到get方法层级,让每次调用get方法时,再根据传入的具体键单独推导类型,即可精确匹配对应值的类型。

修改后的完整代码如下:

interface Person {
    name: string;
    age: number;
} 

// 类仅保留T泛型
class Store<T> {
    constructor(private obj: T) { }

    // K泛型定义在get方法层级,每次调用单独推导
    get<K extends keyof T>(key: K): T[K] {
        return this.obj[key];
    }
}

const person: Person = {
    name: 'John',
    age: 99
};

const store = new Store(person);
const value = store.get('name'); // value类型自动推导为string

修改后调用store.get('name')时返回值类型自动推导为string,调用store.get('age')时返回值类型自动推导为number,符合需求。


内容的提问来源于stack exchange,提问作者Daniel Rodríguez Meza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:24:03