Ramda 可以有 isString 吗?

Posted

技术标签:

【中文标题】Ramda 可以有 isString 吗?【英文标题】:Can Ramda have isString? 【发布时间】:2018-05-27 15:36:57 【问题描述】:

背景

我正在尝试使用 ramda,我需要一个纯函数来让我知道给定的输入是否为字符串,就像 lodash _.isString

问题

在到处搜索之后,我在 Ramda 中找不到任何东西。所以我想知道,有没有办法使用 Ramda 现有的任何函数,我可以创建一个isString 函数?

我发现这非常有限,我不可能在最后只使用 lodash :S

【问题讨论】:

使用const isString = x => typeof x === 'string'有什么问题吗? 只需使用const isString = x => typeof x === 'string' && x instanceof String 或者查看这个答案以获得更可靠的检查***.com/a/17772086/2880747 所以,我从你的帖子中得出的结论是 Ramda 没有这样的功能,我也不能使用 Ramda 工具编写它。是否有反馈渠道可以让我提出这样的建议? 请参阅我的回答,了解 Ramda 如何提供此功能。但是您可以在 Ramda 的Gitter Channel 上提问或在 Ramda 的Issues page 上提出问题。 【参考方案1】:

除了isStringisObjectisArrayisFunction 等之外,Ramda 只提供了 is,您可以使用它来创建您喜欢的任何这些:

const isString = R.is(String)
const isRectangle = R.is(Rectangle)

isString('foo') //=> true
isString(42) //=> false

isRectangle(new Rectangle(3, 5)) //=> true
isRectangle(new Square(7)) //=> true (if Rectangle is in the prototype chain of Square)
isRectangle(new Triangle(3, 4, 5)) //=> false

而且您不必创建中间函数。你可以直接使用它:

R.is(String, 'foo') //=> true
R.is(String, a: 'foo') //=> false

【讨论】:

再次获得难以置信的宝贵输出。先生,你应该得到这个赞成票的所有汁液!【参考方案2】:

这也应该可以R.type(x) === "String"

【讨论】:

【参考方案3】:

如果您正在寻找 ramda 的谓词函数,您应该查看 ramda-adjunct 库。 ramda 最流行和最广泛使用的扩展,附带 ramda 没有的好东西,由于各种原因,也永远不会实现。我负责维护这个库,我们有超过 25 个贡献者。

关于 R.is,我会小心使用这个函数,它在底层使用 javascript instanceof 运算符。当检查来自不同 JavaScript 领域/环境的对象时,例如IFrame,您可能会对 R.is 返回值的结果感到惊讶。

【讨论】:

以上是关于Ramda 可以有 isString 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Ramda — 根据允许列表切换对象的属性

使用 Ramda 过滤每个内部属性数组

将 fetch api 与 ramda 一起使用

使用 Ramda 在特定条件下添加对象属性值

[Ramda] Basic Curry with Ramda

[Ramda] Sort, SortBy, SortWith in Ramda