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

TypeScript通过函数返回对象属性时如何推导精确属性类型

解决方法

你只需要给函数新增一个泛型参数捕获传入的键的具体类型即可,修改后的代码如下:

function testAccess<T, K extends keyof T>(o: T, p: K): T[K] {
    return o[p]
}

const a = testAccess(testObject, 'a') // 推导类型为 string
const b = testAccess(testObject, 'b') // 推导类型为 number
const c = testAccess(testObject, 'c') // 推导类型为 boolean

问题原因

你原来的写法存在两个问题:

  1. 只声明了一个泛型参数T,参数p的类型标注为keyof T,这里的keyof T是目标对象所有键的联合类型,TypeScript只会把p识别为这个联合类型,不会自动追踪你实际传入的具体是哪一个键。
  2. 返回值类型写的T[typeof p]本质上等价于T[keyof T],也就是所有属性类型的联合,自然无法得到精准类型。

新增泛型参数K extends keyof T之后,TypeScript会自动根据你调用时传入的键值,把K绑定为对应的字面量类型,返回值T[K]就能精准匹配到该键对应的属性类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:45:03