有没有一种方法可以仅检查Typescript中另一个函数的参数中函数的参数?

时间:2020-05-25 17:14:15

标签: typescript

我想创建一个接受另一个函数和该函数的参数的函数。这是一个示例:

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[],因为inputFunc的类型为(...args: any[]) => void。是否有任何方法可以更改...argsfoo的类型,使其取决于inputFunc的参数?

编辑

当然,在发布之后,我就找到了自己的问题的答案:

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 个答案:

答案 0 :(得分:1)

使用泛型来键入传递的函数,以便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