我想将一个函数和该函数的参数发送给另一个函数。这样做时,我想保留所有键入信息,并获得智能感知和所有语法检查。最终目的是在以后的阶段调用该函数。
目前我有类似的东西,它可以工作,但是不能为我提供带有参数的类型安全性:
functionA () {
return this.functionB(someService.someMethod, ["one", "two", "three"]);
}
functionB<TResponse, TFunction extends (...args: any[]) => Promise<TResponse>>(
fn: TFunction,
params: Parameters<TFunction>): Promise<TResponse> {
...
}
我在下面尝试过此方法,该方法似乎可以修复调用语法,但是会产生其他效果,例如失去函数的结果类型,更重要的是,在编译器中给出错误Type 'TFunction' does not satisfy the constraint '(...args: any[]) => Promise<TResponse>'.
:
functionB<TResponse, TFunction extends Function>(
fn: TFunction,
params: Parameters<TFunction>): Promise<TResponse> {
...
}