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

如何定义传入指定键的泛型函数实现TS对象类型正确推导

TypeScript 转换实现

完全可以通过泛型定义满足自动推导键类型的要求,转换后的代码如下:

function generate<K extends PropertyKey>(key: K) {
  return {
    [key]: 'success',
  } as Record<K, string>;
}

const obj = generate('result');
// 此时 typeof obj 类型为 { result: string },完全符合要求

实现逻辑说明

  • 定义泛型参数K,约束其继承TS内置的PropertyKey类型(即对象合法键的联合类型:string | number | symbol)。当传入固定字符串/数字/符号值作为参数时,TS会自动将K推导为传入值的字面量类型,而非宽泛的基础类型。
  • 由于TS默认对动态计算属性名的返回值会推导出{ [x: string]: string }这类宽泛结构,因此使用Record<K, string>做安全类型断言,明确返回对象的键为传入的K类型、值为string类型。该断言完全匹配运行时的实际返回结构,不存在类型安全问题。

效果验证

传入不同键名时,TS会自动推导对应返回类型:

const idObj = generate('id');
// typeof idObj => { id: string }
const numKeyObj = generate(123);
// typeof numKeyObj => { 123: string }

访问不存在的键时会直接触发类型报错,符合类型安全要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:15:28