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
相关产品推荐
相关产品推荐

