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

TypeScript使用泛型实现动态属性类型时报TS2322错误如何解决?

TS2322错误原因及解决方案

错误原因

你写的代码逻辑本身是合理的,该报错是TypeScript 4.3.5版本的类型推导局限导致的:当使用泛型K作为动态对象的键时,TS 4.3.5会将这个动态生成的对象默认推导为{ [x: string]: string }索引签名类型,无法自动关联到你声明的泛型映射类型{ [p in K]: string },因此触发类型不匹配错误。

解决方法

  • 方案1:直接使用类型断言,手动告诉TS该对象的实际类型,是最轻便的解决方式
function abc<K extends keyof any>(
  param: K,
) {
  const z = {
    [param]: 'abc',
  } as { [p in K]: string };
}
  • 方案2:封装通用工具函数,适合多处需要生成单键泛型对象的场景,避免重复写类型断言
function createSingleKeyObj<K extends keyof any, V>(key: K, value: V) {
  return { [key]: value } as Record<K, V>;
}

function abc<K extends keyof any>(
  param: K,
) {
  const z = createSingleKeyObj(param, 'abc');
}
  • 方案3:升级TypeScript版本到4.4及以上,该版本优化了动态计算属性的类型推导逻辑,你的原始写法可以直接通过类型校验,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:09:03