Ramda 可以有 isString 吗?

Can Ramda have isString?

背景

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

问题

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

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

Ramda 没有 isStringisObjectisArrayisFunction 等,而是简单地提供 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

这也应该有效 R.type(x) === "String"

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

关于 R.is,我会小心使用此函数,它在后台使用 JavaScript instanceof 运算符。当检查来自不同 JavaScript realms/envs 的对象时,例如IFrame,您可能会对 R.is return 值的结果感到惊讶。