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

TypeScript中函数返回类型能否用于自身参数定义及类型推导问题

TypeScript 函数返回类型复用参数定义的解决方案

你遇到的loop返回类型推导为any的问题,本质是原泛型定义存在循环依赖导致TypeScript类型推导优先级失效,调整泛型结构即可解决。

问题原因

原泛型定义中B的约束依赖C,C的约束又反向依赖B的返回值,TypeScript处理调用时会优先推导输入类型A和handler对应的B,此时C还未完成推导,导致handler内部的loop参数返回类型被默认判定为any。

修复后的代码

核心函数定义

function chain<A, C>(input: A, handler: (input: A, loop: (input: A) => C) => C): C {
  const loop = (input: A): C => handler(input, loop);
  return loop(input);
}

简化后仅保留输入类型A和最终返回类型C两个泛型参数,直接将handler的类型和loop返回类型绑定,消除循环推导依赖。

调用验证

// 模拟外部异步依赖
function someExternalThing(): Promise<boolean> {
  return Promise.resolve(Math.random() > 0.5);
}

chain('test', async (value, loop): Promise<string> => {
  const ready = await someExternalThing();
  if (ready) {
    return value;
  } else {
    // 此时loop的类型会被正确推导为 (input: string) => Promise<string>,无any类型问题
    return await loop(value + '!');
  }
});

调整后不需要额外显式传入泛型参数,只要你为handler函数定义了明确的返回类型,TypeScript会自动完成所有类型推导,完全符合类型安全要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:36:03