【问题标题】:using ramda type definition, pipe function throws type error使用 ramda 类型定义,管道函数抛出类型错误
【发布时间】:2020-02-03 18:07:19
【问题描述】:

我为 Ramda (@types/ramda) 安装了类型定义文件,当我编写以下代码时,没有任何抱怨:

const gt5 = (x: number): boolean => x > 5
const inc = (x: number): number => x + 1
const f = pipe(map(inc), filter(gt5))
console.log(f([1,6,8]))

但是如果我改变过滤器和映射的顺序:

const gt5 = (x: number): boolean => x > 5
const inc = (x: number): number => x + 1
const f = pipe(filter(gt5), map(inc))
console.log(f([1,6,8]))

我收到以下错误:

(alias) filter(fn: (value: number) => boolean): R.FilterOnceApplied (+4 重载) 导入过滤器 没有重载匹配此调用。 最后一个重载给出了以下错误。 “FilterOnceApplied”类型的参数不可分配给“(x0:未知,x1:未知,x2:未知)=>只读数字[]”类型的参数。 参数“source”和“x0”的类型不兼容。 类型 'unknown' 不可分配给类型 'number[] |字典'。 类型“未知”不可分配给类型“字典”.ts(2769) index.d.ts(2172, 9):最后一个重载在这里声明。

因为代码仍然可以正常运行。

如何解决这个错误?

我正在使用 VSCode。

【问题讨论】:

  • 我建议在论坛中询问维护您的打字文件的任何团队。许多 Ramda 专家对打字稿知之甚少。

标签: typescript ramda.js


【解决方案1】:

filter 应该可以同时处理数组和对象,但打字稿会因此而混淆 - 来自here

因此,解决此错误的一种方法是:

const f = pipe(
  filter<number, "array">(gt5),
  map(inc)
);

希望对你有帮助!

【讨论】:

  • 经过几个小时的搜索终于找到了我的答案。谢谢!
猜你喜欢
  • 2020-02-11
  • 2020-09-12
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 2023-02-10
  • 2016-12-17
  • 2021-05-09
相关资源
最近更新 更多