使 Ramda.js 函数全局可访问(没有 R. )

making Ramda.js functions globally accessible (without R. )

我想在不键入的情况下使用 Ramda.js 函数 R.

我尝试将所有函数添加到全局范围,但它不起作用,这是我的尝试

const R = require('ramda'); // R is an object containing lots of functions
for(let x in R) {
    global.x = x;
}

另外,我想知道如何使用 Ramda 库本身来做到这一点。

确保您设置的是 属性 调用 x,而不是 x 属性: 此外,请务必将 R[x] 的值赋值回去,而不是 属性 名称 x

global[x] = R[x];

您也可以尝试遍历 getOwnPropertyNames:

for (const prop of Object.getOwnPropertyNames(R)) {
    global[prop] = R[prop]
}

或者,如果适用,只需将您需要的属性解构到您的范围内:

const {someProp, someOtherProp} = R;

根据评论,虽然我不同意输入额外的 2 个字符会被称为大惊小怪,但这就是您的感受。

就像@uber5001 提到的 de-structure 技术,这是一种方法,但这意味着您首先需要将整个 ramda 函数 require 转换为 R 然后检索您需要的函数。

您也可以require仅需要的功能:

const uniq = require('ramda/src/uniq')
const zip = require('ramda/src/zip')
// and so on

HTH

将 Ramda 的所有函数设置为全局变量可能会有风险。 Ramda 有很多功能,其中一些可能会覆盖您现有的全局变量。一个更好的做法(仍然被认为是一个不好的做法,因为你仍然可以 shadow-name 变量)是 with 语句,它在不覆盖你的外部范围变量的同时解构对象的所有属性。

with(R) {
  pipe(
    map(x => x ** 2),
    filter(x => x > 24)
  )([3, 4, 5, 6]); // => [25, 36]
}

注意 with 语句在严格模式下被禁用。