1 回答

TA贡献1846条经验 获得超7个赞
可悲的是,实现此接口的唯一方法是使所有参数any
。
这个接口很像函数重载。这意味着实现函数必须采用一个参数,该参数是该位置参数的所有可能性的并集。
第一个参数是
string
,string
,string
,any
或object
。所以类型是string | object | any
,它简化为 justany
因为any
包括其他可能性。第二个参数是
CustomCallBackFunction | any | undefined
,这又是any
第三个参数可以是
CustomCallBackFunction
或 的第二项...meta: any[]
,因此再次说明,那一项是any
。
因此,假设所有参数都必须是 type any
,并且可能有任意数量的参数,我认为唯一可行的实现签名是:
const fn: A = (...args: any[]) => {}
然后您必须自己测试每个参数的类型并弄清楚每个参数的含义以及使用了哪个调用签名。是的,那会很糟糕。
const fn: A = (...args: any[]) => {
if (args.length === 2 && typeof args[0] === 'string' && typeof args[1] === 'function') {
// (message: string, callback: CustomCallBackFunction): void;
const [message, callback] = args as [string, CustomCallBackFunction]
} else if (args.length === 3 && typeof args[0] === 'string' && !Array.isArray(args[1]) && typeof args[2] === 'function') {
// (message: string, meta: any, callback: CustomCallBackFunction): void;
const [message, meta, callback] = args as [string, any, CustomCallBackFunction]
} else {
// etc...
}
}
添加回答
举报