К сожалению, единственный способ реализовать этот интерфейс - сделать все аргументы any
.
Этот интерфейс очень похож на перегрузки функций. Это означает, что функция реализации должна принимать аргумент это объединение всех возможных аргументов в этой позиции.
Первый аргумент - string
, string
, string
, any
или object
. Таким образом, тип - string | object | any
, что упрощается до any
, поскольку any
включает в себя другие возможности.
Второй аргумент - CustomCallBackFunction | any | undefined
, который снова равен any
.
Третий аргумент может быть CustomCallBackFunction
или вторым элементом ...meta: any[]
, так что снова, это any
.
Итак, учитывая, что все аргументы должны быть типа 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...
}
}
Детская площадка