#typescript
Вопрос:
У меня есть следующая функция, которая принимает любое количество аргументов. Однако я знаю, что первым аргументом должна быть функция, другие аргументы могут быть любыми, и я не знаю длину массива. Какую форму я должен придать типу массива известного 1-го элемента, но неизвестной длины и типов для других?
// i tried also ...args: [Function, any], but eslint does not like the generic 'Function' type and throw an error
function test(...args: Array<????>) {
const [callbackFn, ...restOfArgs] = args;
// do whatever
}
Ответ №1:
Вы можете отделить первый аргумент, а затем использовать синтаксис «…» для захвата остальных аргументов. Замените () => void
его на любой тип функции обратного вызова.
function test(callbackFunction: () => void, ...args: unknown[]): void {
callbackFunction()
// access the rest of the arguments as you would from an array
}
ПРАВКА: Я понял, что не полностью ответил на вопрос. Если вы хотите сохранить все аргументы в одной и той же переменной, вы можете сделать это следующим образом:
function test(...args: [() => void, ...unknown[]]): void {
args[0]()
}