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

如何在TypeScript泛型中正确获取指定属性的对应类型?

问题解决方法

你只需要给getProperty函数新增第二个泛型参数用于捕获具体的属性类型即可,修正后的实现如下:

// 新增第二个泛型参数K,约束为T的属性名联合类型
function getProperty<T, K extends keyof T> (obj: T, property: K): T[K] {
    return obj[property];
}

调用方式

调用时可以手动指定泛型,也可以直接让TS自动推导返回值类型:

export type TestType = {
    key1: string,
    key2: number,
    key3: Array<string>
};

const test:TestType = {
    key1: 'hello',
    key2: 56,
    key3: ['hi']
};

// 手动指定泛型的写法
const thisVariableShouldBeAString:string = getProperty<TestType, 'key1'>(test, 'key1');
// 自动推导的写法,无需手动标注类型,TS会自动识别返回值为string类型
const autoInferResult = getProperty(test, 'key1');

原代码问题说明

你之前的写法里property的类型是keyof T,属于所有属性名的联合类型,返回值T[typeof property]自然就是所有属性值的联合类型,无法关联到你实际传入的某一个具体key对应的类型。新增第二个泛型K后,TS会捕获你传入的具体属性字面量类型,从而精准匹配到对应属性的类型。

内容的提问来源于stack exchange,提问作者filipot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:27:04