小编rjh*_*ort的帖子

柯里化时,TypeScript 泛型不适用于先前的函数,如何?

我有一个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类型系统不知道 。

如何修复我编写函数以使类型工作的方式(不放弃柯里化 - 我知道如果不柯里化它会弄清楚)?

functional-programming currying typescript

4
推荐指数
1
解决办法
275
查看次数