Spec-Zone.ru › ESLint

no-redeclare

Запретить повторную декларацию переменных

✅ Рекомендуется

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

В JavaScript можно повторно объявить переменную с тем же именем, используя var. Это может привести к путанице, так как неясно, где переменная фактически объявлена и инициализирована.

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

Это правило направлено на устранение переменных, которые объявлены несколько раз в одном и том же области видимости.

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

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

var a = 3;
var a = 10;

class C {
    foo() {
        var b = 3;
        var b = 10;
    }

    static {
        var c = 3;
        var c = 10;
    }
}

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

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

var a = 3;
a = 10;

class C {
    foo() {
        var b = 3;
        b = 10;
    }

    static {
        var c = 3;
        c = 10;
    }
}

Параметры

Это правило принимает один необязательный аргумент, объект с логическим свойством "builtinGlobals". По умолчанию true. Если установлено значение true, это правило также проверяет повторную декларацию встроенных глобальных переменных, таких как Object, Array, Number…

builtinGlobals

Параметр "builtinGlobals" будет проверять повторную декларацию встроенных глобальных переменных в глобальной области видимости.

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

Открыть в Playground
/*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/

var Object = 0;

Обратите внимание, что при использовании sourceType: "commonjs" (или ecmaFeatures.globalReturn, если используется парсер по умолчанию), верхняя область видимости программы на самом деле не является глобальной областью видимости, а скорее областью видимости «модуля». В этом случае объявление переменной с именем, совпадающим с именем встроенной глобальной переменной, не является повторной декларацией, а скорее затемнением глобальной переменной. В этом случае следует использовать правило no-shadow с параметром "builtinGlobals".

Обработка TypeScript

Безопасно отключить это правило при использовании TypeScript, так как компилятор TypeScript выполняет эту проверку.

Обратите внимание, что, хотя TypeScript поймает let и const повторные объявления, он не поймает var повторные объявления. Таким образом, если вы используете устаревленный var ключевой слова в своем коде TypeScript, это правило все еще будет полезным.

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

  • no-shadow

Версия

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

Ресурсы

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

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

Spec-Zone.ru

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