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