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

TypeScript如何使用计算类型正确构造Record类型返回值

问题原因

TypeScript 现有类型系统存在限制:当你使用绑定了泛型参数的动态值作为对象字面量的键时,TS 无法自动将键的类型收窄为你定义的 RefName<EventName> 精确字面量类型,会默认推导为更宽泛的索引类型,因此出现类型不匹配报错。

解决方案

方案1:对象类型断言(最简可行方案)

直接对整个返回的对象做类型断言即可,你的业务逻辑已经保证该结构符合类型要求,断言是安全的:

const useViewedEventTwo = <EventName extends keyof SegmentEventMap>(event: EventName): Record<RefName<EventName>, string> => {
  return {
    [refName(event)]: ''
  } as Record<RefName<EventName>, string>;
}

方案2:键显式类型标注

你也可以提前把动态键的类型显式标注,再构造对象:

const useViewedEventTwo = <EventName extends keyof SegmentEventMap>(event: EventName): Record<RefName<EventName>, string> => {
  const key = refName(event) as RefName<EventName>;
  return {
    [key]: ''
  };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:57:03