ESlint警告使用匿名的功能关键字,并且不允许在功能内分配参数

时间:2019-02-08 11:32:54

标签: javascript ecmascript-6 lodash eslint

我有一个代码使用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警告,但希望正确执行它。

请提出建议

1 个答案:

答案 0 :(得分:1)

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

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

因此,解决方案很少:要么为transform()编写自己的代码。或者,您可以按行/按文件/全局抑制eslint规则,以允许使用props: false修改函数参数的属性(有关详细信息,请参见no-param-reassign docs