Есть ли способ проверить тип только параметров функции в Typescript в аргументах другой функции? - PullRequest
0 голосов
/ 25 мая 2020

Я хочу создать функцию, которая принимает другую функцию и аргументы этой функции. Вот пример:

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.

1 Ответ

1 голос
/ 25 мая 2020

Используйте универсальные шаблоны для ввода переданной функции, чтобы ее можно было использовать Parameters:

function foo<T extends (...args: any) => void)>(inputFunc: T, ...args: Parameters<T>) {

}

foo(bar, "string A") // Error
foo(bar, "string A", "string A") // OK
foo(bar, "string A", "string A", "string C") // Error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...