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

TypeScript泛型函数Component的computed入参类型推断异常问题

TypeScript泛型类型推断异常原因说明

问题根因

这个推断差异是TypeScript泛型参数的推断优先级顺序和上下文推断边界规则导致的:

  • 你定义的Component泛型参数存在多层依赖:TData的入参类型依赖TProperty,TComputed的入参类型又依赖TData的返回值。
  • 对于无prop入参的data函数,TypeScript不需要关联TProperty就能直接推断出TData的完整类型为() => {dataA: string},后续TComputed里的条件推断可以正确提取到TData的返回值类型,交叉后的AllData类型就符合预期。
  • 当data函数新增未标注类型的prop入参后,TypeScript需要先确定prop的类型(也就是TProperty)才能完成TData的完整类型推断。但computed的上下文类型推断优先级更高,在TData返回值还未完成推断的阶段,就会先 fallback 到TData泛型约束里定义的返回值上限Record<string, any>,最终就出现了{propA:string} & Record<string, any>的推导结果。

修复方案

你可以将TComputed约束里的手动条件推断替换为TS内置的ReturnType工具类型,就能对齐两种场景的推断逻辑:

function Component<
  TProperty, 
  TData extends (prop: TProperty) => Record<string, any>, 
  TComputed extends { 
    [k: string]: (data: TProperty & ReturnType<TData>) => any 
  }
>(opt: { properties: TProperty, data: TData, computed: TComputed })
: TData { return '' as any }

调整后无论data是否携带prop入参,AllData的类型都可以被正确推导。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:36:03