Я хочу создать функцию, которая принимает другую функцию и аргументы этой функции. Вот пример:
function foo(inputFunc: (...args: any[]) => void, ...args: Parameters<typeof inputFunc>) { ... }
function bar(a: string, b: string) { ... }
foo(bar, "string A") //I want this to show an error in the IDE because argument B is missing.
Я пробовал это:
function foo(inputFunc: (...args: any[]) => void, ...args: Parameters<typeof inputFunc>) { ... }
Но тип args
всегда any[]
, потому что inputFun c имеет тип (...args: any[]) => void
. Есть ли способ изменить тип ...args
в foo
так, чтобы он зависел от параметров inputFunc
?
EDIT
И Конечно, сразу после публикации я понял ответ на свой вопрос:
function foo<F extends (...args: any[]) => void>(inputFunc: F, ...args: Parameters<typeof inputFunc>) { ... }
function bar(a: string, b: string) { ... }
foo(bar, "string A") //Throws an error.