Spec-Zone.ru › ESLint

consistent-return

Требовать, чтобы инструкции return всегда или никогда не указывали значения

В отличие от языков со статической типизацией, которые требуют, чтобы функция возвращала значение указанного типа, JavaScript позволяет разным путям выполнения кода в функции возвращать значения разных типов.

Запутывает в JavaScript то, что функция возвращает undefined, если верно любое из следующих условий:

  • Она не выполняет инструкцию return перед завершением работы.
  • Она выполняет return, в котором явно не указано значение.
  • Она выполняет return undefined.
  • Она выполняет return void, за которым следует выражение (например, вызов функции).
  • Она выполняет return, за которым следует любое другое выражение, вычисляемое в undefined.

Если в некоторых путях выполнения функции явно возвращается значение, а в других — нет, это может быть ошибкой типизации, особенно в большой функции. В следующем примере:

  • Один из путей выполнения функции возвращает логическое значение true.
  • Другой путь выполнения явно не возвращает значение, поэтому неявно возвращает undefined.
function doSomething(condition) {
    if (condition) {
        return true;
    } else {
        return;
    }
}

Подробное описание правила

Это правило требует, чтобы инструкции return всегда или никогда не указывали значения. Правило игнорирует определения функций, имена которых начинаются с заглавной буквы, поскольку конструкторы (при вызове с оператором new) неявно возвращают созданный объект, если явно не возвращают другой объект.

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

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

function doSomething(condition) {
    if (condition) {
        return true;
    } else {
        return;
    }
}

function doSomethingElse(condition) {
    if (condition) {
        return true;
    }
}

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

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

function doSomething(condition) {
    if (condition) {
        return true;
    } else {
        return false;
    }
}

function Foo() {
    if (!(this instanceof Foo)) {
        return new Foo();
    }

    this.a = 0;
}

Параметры

У этого правила есть параметр-объект:

  • "treatUndefinedAsUnspecified": false (по умолчанию): всегда либо указывать значения, либо неявно возвращать только undefined.
  • "treatUndefinedAsUnspecified": true: всегда либо указывать значения, либо явно или неявно возвращать undefined.

treatUndefinedAsUnspecified

Примеры неправильного кода для этого правила с параметром { "treatUndefinedAsUnspecified": false } по умолчанию:

Открыть в Playground
/*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": false }]*/

function foo(callback) {
    if (callback) {
        return void callback();
    }
    // no return statement
}

function bar(condition) {
    if (condition) {
        return undefined;
    }
    // no return statement
}

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

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

function foo(callback) {
    if (callback) {
        return void callback();
    }
    return true;
}

function bar(condition) {
    if (condition) {
        return undefined;
    }
    return true;
}

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

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

function foo(callback) {
    if (callback) {
        return void callback();
    }
    // no return statement
}

function bar(condition) {
    if (condition) {
        return undefined;
    }
    // no return statement
}

Когда не следует использовать это правило

Если вы хотите разрешить функциям возвращать разные значения return в зависимости от ветвления кода, это правило можно безопасно отключить.

Версия

Это правило было добавлено в ESLint v0.4.0.

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/consistent-return

Spec-Zone.ru

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