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

TypeScript中如何通过字符串访问对象属性并获取正确类型?

TypeScript类型安全访问带点键名的对象属性

我有以下代码:

interface Response { 'property.a': number; 'property.b': string }
const response: Response = {
  'property.a': 10,
  'property.b': 'foo'
}

我需要一种通过字符串访问对象属性的方式,必须同时满足两个要求:

  • 访问存在的属性时,能获取该属性的精确类型
  • 访问不存在的属性时,TypeScript会抛出类型错误

直接访问的问题

直接用方括号访问时:

response['property.a'] // 符合预期:类型为number
response['property.c'] // 应该抛出类型错误,但实际没有

这种方式满足第一个要求,但无法检测不存在的属性,不满足第二个要求。

通用get函数的问题

我尝试了写一个通用的get函数:

const get = <T>(obj: T, key: keyof T) => obj[key]
get(response, 'property.a') // 期望是number类型,但实际返回number | string的联合类型
get(response, 'property.c') // 符合预期:抛出类型错误

这个函数能检测不存在的属性,满足第二个要求,但返回的是对象所有属性类型的联合类型,无法得到精确的属性类型,不满足第一个要求。

寻求解决方案

有没有办法同时满足这两个要求?

补充说明:我知道TypeScript的noImplicitAny规则可以实现这个效果,但当前工作的代码库无法启用该规则,所以需要其他替代方案。


内容的提问来源于stack exchange,提问作者Luuc van der Zee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:01:07