no-case-declarations
Запрет лексических объявлeний в операторах case
Использование конфигурации recommended из @eslint/js в файле конфигурации включает данное правило
Некоторые проблемы, выявленные этим правилом, могут быть исправлены вручную с помощью предложений редактора подсказок
Это правило запрещает лексические объявления (let, const, function и class) в операторах case/default. Причина в том, что лексическое объявление видно во всем блоке switch, но оно инициализируется только при присвоении, что произойдёт только в том случае, если будет достигнут соответствующий оператор case.
Чтобы гарантировать, что лексическое объявление применяется только к текущему оператору case, оберните операторы в блоки.
Детали правила
Это правило призвано предотвратить доступ к неинициализированным лексическим связям, а также доступ к поднятым функциям через различные операторы case.
Примеры некорректного кода для этого правила:
/*eslint no-case-declarations: "error"*/
switch (foo) {
case 1:
break;
case 2:
break;
case 3:
break;
default:
}
Примеры корректного кода для этого правила:
/*eslint no-case-declarations: "error"*/
// Declarations outside switch-statements are valid
const a = 0;
switch (foo) {
// The following case clauses are wrapped into blocks using brackets
case 1: {
let x = 1;
break;
}
case 2: {
const y = 2;
break;
}
case 3: {
function f() {}
break;
}
case 4:
// Declarations using var without brackets are valid due to function-scope hoisting
var z = 4;
break;
default: {
class C {}
}
}
Когда не использовать
Если вы полагаетесь на поведение fall through и хотите получить доступ к связям, введенным в блоке case.
Связанные правила
Версия
Это правило было введено в ESLint v1.9.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-case-declarations