Spec-Zone.ru › ESLint

no-case-declarations

Запрет лексических объявлeний в операторах case

✅ Recommended

Использование конфигурации recommended из @eslint/js в файле конфигурации включает данное правило

💡 hasSuggestions

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

Это правило запрещает лексические объявления (let, const, function и class) в операторах case/default. Причина в том, что лексическое объявление видно во всем блоке switch, но оно инициализируется только при присвоении, что произойдёт только в том случае, если будет достигнут соответствующий оператор case.

Чтобы гарантировать, что лексическое объявление применяется только к текущему оператору case, оберните операторы в блоки.

Детали правила

Это правило призвано предотвратить доступ к неинициализированным лексическим связям, а также доступ к поднятым функциям через различные операторы case.

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

Открыть в Playground
/*eslint no-case-declarations: "error"*/

switch (foo) {
    case 1:
        let x = 1;
        break;
    case 2:
        const y = 2;
        break;
    case 3:
        function f() {}
        break;
    default:
        class C {}
}

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

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

Связанные правила

  • no-fallthrough

Версия

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

Ресурсы

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

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

Spec-Zone.ru

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