我有一个map处理承诺的咖喱版本。它需要两个参数,一次一个。它需要两个类型参数来让调用者提供无法推断的部分。但是,实际上调用者总是必须提供它们,因为它们传入的转换函数中不会推断类型。该函数如下所示:
/**
* @description
* Like `ramda.map`, but handles an iterator that returns a promise (or not).
*
* @example
* await mapP((x: number) => Promise.resolve(x + 1))([1, 2, 3]) // -> [2, 3, 4]
*/
export const mapP = <T, R>(xf: (value: T) => Promise<R> | R) => (
data: T[],
): Promise<R[]> => pipe(when(isNil, always([])), map(xf), allP)(data)
Run Code Online (Sandbox Code Playgroud)
这是我调用它,您可以看到x类型系统不知道 。
如何修复我编写函数以使类型工作的方式(不放弃柯里化 - 我知道如果不柯里化它会弄清楚)?