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

TypeScript中泛型ParsedData无法正确推导,函数参数类型未达预期

问题原因分析

你的代码中,ParsedData 泛型被定义在最外层的 fromData 函数上,但调用 fromData({ user: 1 }) 时,TypeScript 只能推断出 RawData 的类型({ user: number }),此时还没有传入 parser 函数,无法确定 ParsedData 的具体类型,因此 TypeScript 会将其默认设为 unknown,导致后续 renderer 函数的 parsedData 参数类型为 unknown。

解决方案

将 ParsedData 泛型移到内层的 withParser 函数上,这样当调用 hasData(即 withParser)传入 parser 时,TypeScript 就能从 parser 的返回值推断出 ParsedData 的类型,并自动同步到 renderer 的参数上。

修正后的代码如下:

function fromData<RawData>(rawData: RawData) {
    return function withParser<ParsedData>(
        parser: (data: RawData) => ParsedData,
        renderer: (parsedData: ParsedData) => unknown
    ) {
        const parsedData = parser(rawData);
        
        return {
            renderedData: renderer(parsedData),
            parsedData
        };
    };
}

const hasData = fromData({ user: 1 });

hasData(
    (rawData) => rawData.user + 1, // 此处 parser 返回 number,ParsedData 被推断为 number
    (parsedData) => parsedData + 100 // parsedData 类型现在是 number,无类型错误
);
关键变化说明
  • 外层 fromData 仅保留 RawData 泛型,因为调用它时只有原始数据的类型信息可用。
  • 内层 withParser 新增 ParsedData 泛型,该泛型由传入的 parser 函数的返回值类型推断而来,确保 renderer 的参数类型与 parser 的返回类型完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:10:46