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

TypeScript如何定义首个元素为函数、其余元素类型和长度未知的数组类型

类型定义解决方案

基础实现(满足需求无额外约束)

你可以使用TypeScript的带剩余元素的元组类型来匹配参数结构,同时将ESLint禁止的泛用Function替换为明确的可调用类型签名(...args: any[]) => any即可:

function test(...args: [(...args: any[]) => any, ...any[]]) {
  const [callbackFn, ...restOfArgs] = args;
  // 你的业务逻辑
}

写法说明:

  • 元组第一个位置的(...args: any[]) => any明确标注首个参数是任意可调用的函数,符合ESLint的类型安全要求,不会触发泛用Function的报错
  • 元组末尾的...any[]表示后续可以跟随任意数量、任意类型的参数,适配你参数总长度未知、其余参数无类型限制的需求

进阶泛型实现(增强类型安全)

如果你希望后续传入的参数可以自动匹配回调函数的参数类型,获得更好的类型提示和校验,可以使用泛型写法:

// T 泛型约束传入的回调函数类型
// Parameters<T> 自动提取回调的参数类型作为后续参数的类型约束
function test<T extends (...args: any[]) => any>(...args: [T, ...Parameters<T>]) {
  const [callbackFn, ...restOfArgs] = args;
  return callbackFn(...restOfArgs);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:18:04