web-dev-qa-db-ja.com

ESLint警告ES6の一貫性のある戻り規則

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つの警告が表示されます...

矢印関数は戻り値(一貫した戻り)を予期していました不要なreturnステートメント(無用な戻りなし)

16
user762579

http://eslint.org/docs/rules/consistent-return 言います:

このルールでは、常に値を指定するか、値を指定しないようにreturnステートメントが必要です。

If条件が満たされない場合、矢印関数はreturnステートメントに遭遇することなく終了し、この規則に違反します。 2番目のバージョンでは、最初の戻り値とは異なり、2番目の戻り値に値が指定されていないため、この規則に違反しています。 2番目の警告は、追加のreturnステートメントが冗長であることを示しています。

リンターを幸せにするためには、おそらく条件が満たされない場合に矢印関数から適切に戻るものについて考える必要があります。あなたのfind関数が何をするのか正確にはわかりませんが、Array.prototype.findと同様に振る舞うなら、矢印関数の最後でfalseを返したいかもしれません。その場合に未定義を返す必要がある場合、同じページのこの段落が適用されます:

使用しない場合

コードの分岐に応じて関数に異なる戻り動作を許可する場合は、このルールを無効にしても安全です。

編集:私は以前にオプションtreatUndefinedAsUnspecifiedを見るように書きましたが、ブランチの1つだけでundefinedを返す必要がある場合、どちらの設定も役に立たないようです。

15
JayK

戻り値は正しく挿入されますが、その値を指定する必要があります...

return false;

正しい値です

9
user762579