Вы можете либо определить тип callback
:
function callFnWithArgs (callback: (a: string, b: number) => void) {
callback(...getArgs())
}
Или, если есть возможность передавать аргументы извне функции callFnWithArgs
, вы можете использовать Общие параметры покоя :
function getArgs (): [string, number] {
return ['hello world', 22]
}
function callFnWithArgs<T extends any[]>(args: T, callback: (...args: T) => void) {
callback(...args);
}
callFnWithArgs(getArgs(), (str, nr) => {
})
Еще один подход заключается в создании перегрузок с универсальными типами для параметров:
function getArgs(): [string, number] {
return ['hello world', 22]
}
function callFnWithArgs<T>(callback: (a: T) => void);
function callFnWithArgs<T1, T2>(callback: (a: T1, b: T2) => void);
function callFnWithArgs(callback: (...args: any[]) => void) {
callback(...getArgs());
}
callFnWithArgs<string, number>((str, nr) => {
})