【问题标题】:ESlint warns for function keyword in anonymous and doesnt allow assignment to arguments within the function匿名函数关键字的 ESlint 警告,并且不允许分配给函数内的参数
【发布时间】:2019-02-08 11:32:53
【问题描述】:

我有一个代码可以使用 lodash 转换将我可用的对象的键重命名为:

const replaceKeysDeep = (obj, keysMap) => { 
  return transform(obj, function(result, value, key){
    const currentKey = keysMap[key] || key;
    result[currentKey] = isObject(value) ? replaceKeysDeep(value, keysMap) : value;
  });
};

我把上面的实现改成

const replaceKeysDeep = (obj, keysMap) => { 
  return transform(obj, (result, value, key) => {
    const currentKey = keysMap[key] || key;
    result[currentKey] = isObject(value) ? replaceKeysDeep(value, keysMap) : value;
  });
};
const newKeys = {
          abs: 'myname',
          tyu: 'yourname'
};
const someObjectContainingKeys = {
          abs: 'something',
          tyu: 'somethingelse'
};
const finalTimePointCalc = replaceKeysDeep(someObjectContainingKeys, newKeys);

由于 eslint 提示输入关键字“function”,实现已更改,但现在它提示我分配给函数参数的属性

在这里我不想抑制 ESLINT 警告,而是让它正确执行。

请推荐

【问题讨论】:

    标签: javascript ecmascript-6 lodash eslint


    【解决方案1】:

    查看源代码后(trasnform() 调用 baseForOwn() 实际上是 baseFor()createBaseFor() 生成)我相信没有机会同时满足这两个要求(使用 lodash 的 transform() 以提高可读性并满足eslint 的no-param-reassign)。

    Array.prototype.reduce 不同,transform() 不允许您显式返回累加器(您可以在createBaseFor() 代码中看到它)。

    所以只有几个解决方案:要么为transform() 编写自己的代码。或者您可以在每行/每文件/全局基础上抑制 eslint 规则,以允许使用 props: false 修改函数参数的道具(有关详细信息,请参阅 no-param-reassign docs

    【讨论】:

    • 那令人心碎....任何方式..感谢您解释它为什么会这样...我将努力实现自己的解决方案
    • 我仍然希望有人对此提出更多见解。顺便说一下,如果您发现其他 SO 可以从这里积累一些与您的发现相关的知识,请支持我的问题
    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2022-01-05
    • 2019-08-26
    • 1970-01-01
    相关资源
    最近更新 更多