我有一个函数foo
:
function foo(a: string, b: string, c: number, d: boolean): Promise<Result> {
return new Promise(resolver => {
...
});
}
// use foo
foo('hello', 'world', 3, true).then(...);
和一个高阶函数,它使用currying来获取函数和参数:
function hof(func: Function) {
return async function (...args: any[]) {
// forward the args to the func and get the result
const result = await func(...args);
// do something else with the result
}
}
// use foo with higher-order function `hof`
hof(foo)('hello', 'world', 3, true);
^^^^^^^^^^^^^^^^^^^^^^^^^ lack type annotations
如何使用flowtype注释hof
函数的整个部分:
...args
:使用any[]
将丢失原始类型答案 0 :(得分:0)
TL; DR
我仍在寻找更好的选择,但这到目前为止对我有用:
open
我遇到了类似的问题。也就是说,键入一个函数,该函数接受带有一组特定参数的函数,然后返回一个接受相同参数集的新函数,而我找不到确定的答案。
长版
这是研究流类型问题并尝试错误的结果。 These are all the variations I tried that work in some degree
function foo(a: string, b: string, c: number): string {
return 'Yay!'
}
// Alternatively, interface Arguments {
type Arguments = {
<A>((A) => any): [A],
<A, B>((A, B) => any): [A, B],
<A, B, C>((A, B, C) => any): [A, B, C],
<A, B, C, D>((A, B, C) => any): [A, B, C, D],
}
function hof <T: Function> (t: T): (...$Call<Arguments, T>) => void {
return (...args) => undefined;
}
hof(foo);
hof(foo)("This", "works", 2);
// hof(foo)("this", "should't", "work");
// hof(foo)("Correctly", "fails", 2, "when there are extra args");