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

TypeScript中如何实现函数调用时混合指定和自动推导泛型参数

解决方案

TypeScript 目前没有原生支持部分泛型参数推断,泛型参数只能选择全部手动传入、或者全部走自动推导。要实现「手动指定部分泛型,剩余泛型由参数自动推导」的需求,最通用的方案是通过柯里化拆分函数,将需要手动指定的泛型放在第一层函数,需要自动推导的泛型放在第二层函数:

const bar: string = "";

// 第一层仅声明需要手动传入的泛型 A
const foo = <A>() => {
  // 第二层声明需要自动推导的泛型 B,实现核心逻辑
  return <B>(arg: B): B => {
    const sideEffect: A = 0 as any; // 此处替换为你实际的业务逻辑
    return arg;
  }
}

调用方式如下:

  • 全量自动推导:foo()(bar),泛型A走默认约束(可自行给A添加默认类型),B自动推导为string
  • 混合指定:foo<number>()(bar),手动指定A为number,B自动推导为string
  • 全量手动指定:foo<number>()<string>(bar),可满足极端场景下的全量指定需求

如果希望避免两层括号调用,也可以给不需要手动指定的泛型添加默认类型,该方案仅适用于TypeScript 4.7以上版本:

const foo = <A, B = unknown>(arg: B): B => {
  const sideEffect: A = 0 as any;
  return arg;
}

// 调用时如果只传A,B会自动从参数推导,不再报错
foo<number>(bar); // 正常运行,B推导为string

注意:默认类型方案的泛型推导存在边界问题,复杂场景下优先选择柯里化拆分方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:06:01