array-callback-return
Требовать инструкции return в функциях обратного вызова методов массивов
Некоторые проблемы, о которых сообщает это правило, можно исправить вручную с помощью предложений редактора
У Array есть несколько методов для фильтрации, отображения и свёртки. Если мы забываем написать инструкцию return в функции обратного вызова одного из них, это, вероятно, ошибка. Если вы не хотите использовать return или вам не нужны возвращаемые результаты, рассмотрите возможность использования .forEach.
// example: convert ['a', 'b', 'c'] --> {a: 0, b: 1, c: 2}
const indexMap = myArray.reduce(function(memo, item, index) {
memo[item] = index;
}, {}); // Error: cannot set property 'b' of undefined
Подробнее о правиле
Это правило требует использовать инструкцию return в функциях обратного вызова методов массивов. Кроме того, с помощью параметра checkForEach оно может требовать, чтобы функция обратного вызова метода массива forEach не возвращала значение.
Это правило находит функции обратного вызова следующих методов и проверяет, используется ли в них инструкция return.
Array.fromArray.fromAsyncArray.prototype.everyArray.prototype.filterArray.prototype.findArray.prototype.findIndexArray.prototype.findLastArray.prototype.findLastIndexArray.prototype.flatMap-
Array.prototype.forEach(необязательно, зависит от параметраcheckForEach) Array.prototype.mapArray.prototype.reduceArray.prototype.reduceRightArray.prototype.someArray.prototype.sortArray.prototype.toSorted- А также соответствующие методы типизированных массивов.
Примеры неправильного кода для этого правила:
/*eslint array-callback-return: "error"*/
const indexMap = myArray.reduce((memo, item, index) {
memo[item] = index;
}, {});
const foo = Array.from(nodes, (node) {
if (node.tagName === "DIV") {
return true;
}
});
const bar = foo.filter(function(x) {
if (x) {
return true;
} else {
}
});
Примеры правильного кода для этого правила:
/*eslint array-callback-return: "error"*/
const indexMap = myArray.reduce(function(memo, item, index) {
memo[item] = index;
return memo;
}, {});
const foo = Array.from(nodes, function(node) {
if (node.tagName === "DIV") {
return true;
}
return false;
});
const bar = foo.map(node => node.getAttribute("id"));
Параметры
Это правило принимает объект конфигурации с тремя параметрами:
-
"allowImplicit": false(по умолчанию) Если задано значениеtrue, функции обратного вызова методов, требующих возвращаемого значения, могут неявно возвращатьundefinedс помощью инструкцииreturn, не содержащей выражения. -
"checkForEach": false(по умолчанию) Если задано значениеtrue, правило также будет сообщать о функциях обратного вызоваforEach, возвращающих значение. -
"allowVoid": false(по умолчанию) Если задано значениеtrue, допускаетсяvoidв функциях обратного вызоваforEach, поэтому правило не будет сообщать о возвращаемом значении с операторомvoid.
Примечание: { "allowVoid": true } работает только если параметр checkForEach установлен в значение true.
allowImplicit
Примеры правильного кода для параметра { "allowImplicit": true }:
/*eslint array-callback-return: ["error", { allowImplicit: true }]*/
const undefAllTheThings = myArray.map(function(item) {
return;
});
checkForEach
Примеры неправильного кода для параметра { "checkForEach": true }:
/*eslint array-callback-return: ["error", { checkForEach: true }]*/
myArray.forEach(function(item) {
});
myArray.forEach(function(item) {
if (item < 0) {
}
handleItem(item);
});
myArray.forEach(function(item) {
if (item < 0) {
}
handleItem(item);
});
myArray.forEach(item handleItem(item));
myArray.forEach(item void handleItem(item));
myArray.forEach(item => {
});
myArray.forEach(item => {
});
Примеры правильного кода для параметра { "checkForEach": true }:
/*eslint array-callback-return: ["error", { checkForEach: true }]*/
myArray.forEach(function(item) {
handleItem(item)
});
myArray.forEach(function(item) {
if (item < 0) {
return;
}
handleItem(item);
});
myArray.forEach(function(item) {
handleItem(item);
return;
});
myArray.forEach(item => {
handleItem(item);
});
allowVoid
Примеры правильного кода для параметра { "allowVoid": true }:
/*eslint array-callback-return: ["error", { checkForEach: true, allowVoid: true }]*/
myArray.forEach(item => void handleItem(item));
myArray.forEach(item => {
return void handleItem(item);
});
myArray.forEach(item => {
if (item < 0) {
return void x;
}
handleItem(item);
});
Известные ограничения
Это правило проверяет функции обратного вызова методов с указанными именами, даже если объект, которому принадлежит метод, не является массивом.
Когда не следует использовать это правило
Если вы не хотите предупреждений об использовании инструкции return в функциях обратного вызова методов массивов, это правило можно отключить.
Версия
Это правило появилось в ESLint v2.0.0-alpha-1.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/array-callback-return