ecmascript-6 - ESLint 警告 ES6 一致返回规则

标签 ecmascript-6 eslint

我收到 ESLint 警告:

预期在箭头函数结束时返回一个值艺术(一致返回)

errors.details.forEach((error) => {
  const errorExists = find(errObj, (item) => {  // <== ESLint warning
    if (item && item.field === error.path && item.location === location) {
      item.messages.push(error.message);
      item.types.push(error.type);
      return item;
    }
  });
  if (!errorExists) {
    errObj.push({
      field: error.path,
      location: error.location,
      messages: [error.message],
      types: [error.type]
    });
  }
});

但是,如果我插入返回
  const errorExists = find(errObj, (item) => {    // <== ESLint warning
    if (item && item.field === error.path && item.location === location) {
      item.messages.push(error.message);
      item.types.push(error.type);
      return item;
    }
    return;   // <== inserted return
  });

然后在这一行上不再有警告,但随后我在插入的返回中收到 2 个警告......

箭头函数期望返回值(一致返回)
不必要的返回语句(no-useless-return)
我不知道如何正确解决这个问题..
欢迎任何反馈

最佳答案

http://eslint.org/docs/rules/consistent-return说:

This rule requires return statements to either always or never specify values.


当您的 if 条件不满足时,箭头函数将终止,而不会遇到 return 语句,这违反了此规则。你的第二个版本违反了这个规则,因为你的第二个返回没有指定一个值,与第一个返回相反。第二个警告告诉您额外的 return 语句是多余的。
为了让 linter 满意,您可能应该考虑在不满足条件时从箭头函数正确返回什么。我不知道你的 find 函数到底做了什么,但如果它的行为类似于 Array.prototype.find 你可能希望在箭头函数的末尾返回 false。如果在这种情况下您需要返回 undefined,则同一页面中的此段落适用:

When Not To Use It

If you want to allow functions to have different return behavior depending on code branching, then it is safe to disable this rule.


编辑:我以前写过看看选项 treatUndefinedAsUnspecified ,但如果您只需要在其中一个分支中返回 undefined ,那么这两种设置似乎都无济于事。

关于ecmascript-6 - ESLint 警告 ES6 一致返回规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43961531/

相关文章:

javascript - 仅将 BabelJS 用作旧浏览器的后备

eslint - 规则 "react/jsx-indent"的配置无效 : Value "4,[object Object]" should NOT have more than 1 items

JavaScript ES6 : use case for destructuring rest parameter

javascript - 用普通的 for 循环替换下划线或 lodash _.each

javascript - webpack 找不到我的导入或转换我的 es6 代码

javascript - 如何在 Flow 中声明更改参数而不会出现 ESLint 错误的函数

typescript - 将 eslint 与 typescript 一起使用 - 无法解析模块的路径

node.js - 我可以使用 eslint 获得特定于项目的自定义代码弃用消息吗?

reactjs - 如何摆脱我的 "@types/react/index"只能在 React/TypeScript 中使用 'esModuleInterp' 标志 Lint 默认导入

javascript - 类与构造函数与工厂函数中的澄清需要