Spec-Zone.ru › ESLint

array-callback-return

Требовать инструкции return в функциях обратного вызова методов массивов

💡 hasSuggestions

Некоторые проблемы, о которых сообщает это правило, можно исправить вручную с помощью предложений редактора

У 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.from
  • Array.fromAsync
  • Array.prototype.every
  • Array.prototype.filter
  • Array.prototype.find
  • Array.prototype.findIndex
  • Array.prototype.findLast
  • Array.prototype.findLastIndex
  • Array.prototype.flatMap
  • Array.prototype.forEach (необязательно, зависит от параметра checkForEach)
  • Array.prototype.map
  • Array.prototype.reduce
  • Array.prototype.reduceRight
  • Array.prototype.some
  • Array.prototype.sort
  • Array.prototype.toSorted
  • А также соответствующие методы типизированных массивов.

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint array-callback-return: "error"*/

const indexMap = myArray.reduce(function(memo, item, index) {
    memo[item] = index;
}, {});

const foo = Array.from(nodes, function(node) {
    if (node.tagName === "DIV") {
        return true;
    }
});

const bar = foo.filter(function(x) {
    if (x) {
        return true;
    } else {
        return;
    }
});

Примеры правильного кода для этого правила:

Открыть в Playground
/*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 }:

Открыть в Playground
/*eslint array-callback-return: ["error", { allowImplicit: true }]*/
const undefAllTheThings = myArray.map(function(item) {
    return;
});

checkForEach

Примеры неправильного кода для параметра { "checkForEach": true }:

Открыть в Playground
/*eslint array-callback-return: ["error", { checkForEach: true }]*/

myArray.forEach(function(item) {
    return handleItem(item);
});

myArray.forEach(function(item) {
    if (item < 0) {
        return x;
    }
    handleItem(item);
});

myArray.forEach(function(item) {
    if (item < 0) {
        return void x;
    }
    handleItem(item);
});

myArray.forEach(item => handleItem(item));

myArray.forEach(item => void handleItem(item));

myArray.forEach(item => {
    return handleItem(item);
});

myArray.forEach(item => {
    return void handleItem(item);
});

Примеры правильного кода для параметра { "checkForEach": true }:

Открыть в Playground
/*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 }:

Открыть в Playground
/*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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API