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

TypeScript如何让高阶函数返回的函数继承入参回调的参数类型

TypeScript 高阶函数参数类型自动适配方案

你可以通过泛型捕获入参函数的具体类型,配合TS内置的Parameters工具类型透传参数类型,即可实现需求。

完整代码实现

// 定义入参函数的联合类型
type InnerFnType = () => void | (arg: string) => void | (arg: number) => void | (arg: object) => void

// 用泛型T约束入参函数类型
function mainFn<T extends InnerFnType>(innerFn: T) {
  // 提取innerFn的参数类型作为run的参数类型
  function run(...args: Parameters<T>) {
    innerFn(...args)
  }
  return run
}

效果验证

const concreteInnerFn = (arg: string) => {
  console.log(arg)
}

const run = mainFn(concreteInnerFn)

run("hello")  // 类型校验通过,正常执行
run(25) // TS抛出类型错误:number类型不能赋值给string类型参数
run({hello: true}) // TS抛出类型错误:object类型不能赋值给string类型参数

原理解释

  • 泛型T extends InnerFnType会在调用mainFn时自动推导传入的innerFn的实际类型,无需手动指定泛型参数
  • 内置工具类型Parameters<T>会自动提取函数类型T的入参类型组成的元组,作为run函数的入参类型,无参、单参、多参场景都可以完美适配
  • 调用run时TS会自动校验参数类型是否和原innerFn的入参类型匹配,不符合要求就会提前抛出类型错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:06:03