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) неявно возвращают созданный объект, если явно не возвращают другой объект.
Примеры неправильного кода для этого правила:
/*eslint consistent-return: "error"*/
function doSomething(condition) {
if (condition) {
return true;
} else {
}
}
function (condition) {
if (condition) {
return true;
}
}
Примеры правильного кода для этого правила:
/*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 } по умолчанию:
/*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": false }]*/
function (callback) {
if (callback) {
return void callback();
}
// no return statement
}
function (condition) {
if (condition) {
return undefined;
}
// no return statement
}
Примеры неправильного кода для этого правила с параметром { "treatUndefinedAsUnspecified": true }:
/*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/
function foo(callback) {
if (callback) {
return void callback();
}
}
function bar(condition) {
if (condition) {
return undefined;
}
}
Примеры правильного кода для этого правила с параметром { "treatUndefinedAsUnspecified": true }:
/*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