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

TypeScript泛型Rest参数自动匹配回调入参类型实现方法

TypeScript 剩余参数关联回调参数类型实现方案

核心实现思路是用泛型元组类型捕获传入的剩余参数类型序列,再将该元组类型直接绑定为回调函数的参数类型,建立两者的类型关联,TS就会自动按位置推导对应参数类型。

正确的函数定义

async function SampleFunction<T extends unknown[]>(
  cb: (...args: T) => void,
  ...args: T
) {
  // 内部执行逻辑,调用回调时直接展开传入的剩余参数即可
  cb(...args);
  // 其他自定义业务逻辑写在这里
}

之前写法失效的原因:回调参数类型和剩余参数类型被分别定义为() => void和any[],两者没有建立类型关联,TS无法推导回调的参数类型,因此会隐式标记为any。

推导效果验证

使用示例代码时,TS会自动完成类型匹配:

let stringVariable = "lorem";
let numberVariable = 8;

SampleFunction(
  (stringArg, numberArg) => {
    // stringArg 自动推导为 string 类型
    // numberArg 自动推导为 number 类型
    stringArg.toUpperCase(); // 类型校验通过
    numberArg.toFixed(2); // 类型校验通过
    // 若调用类型不匹配的方法,比如 stringArg.toFixed(),TS会直接抛出类型错误
  },
  stringVariable,
  numberVariable
);

自带类型校验能力

该写法会自动完成以下类型校验,不需要额外写类型声明:

  • 回调函数的参数个数和传入的剩余参数个数不匹配时,抛出类型错误
  • 回调函数对应位置的参数类型和传入实参类型不兼容时,抛出类型错误
  • 支持任意数量的剩余参数,不需要提前固定参数长度

该写法兼容TypeScript 3.0及以上所有版本,不需要额外修改编译配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:27:22