Spec-Zone.ru › ESLint

no-restricted-globals

Запрещает указанные глобальные переменные

Запрет на использование определённых глобальных переменных может быть полезен, если вы хотите разрешить набор глобальных переменных, но при этом запретить некоторые из них.

Например, в ранних версиях Internet Explorer текущее событие DOM предоставлялось в виде глобальной переменной event, но использование этой переменной уже давно считается плохой практикой. Это ограничение гарантирует, что данная переменная не будет использоваться в коде браузера.

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

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

Параметры

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

Используя строковый параметр, вы можете указать имя глобальной переменной, использование которой нужно запретить, в качестве значения в массиве параметров правила:

{
    "rules": {
        "no-restricted-globals": ["error", "event", "fdescribe"]
    }
}

Кроме того, правило принимает объекты, в которых указываются имя глобальной переменной и необязательное пользовательское сообщение:

{
    "rules": {
        "no-restricted-globals": [
            "error",
            {
                "name": "event",
                "message": "Use local parameter instead."
            },
            {
                "name": "fdescribe",
                "message": "Do not commit fdescribe. Use describe instead."
            }
        ]
    }
}

Примеры неправильного кода для указанных имён глобальных переменных "event", "fdescribe":

Открыть в Playground
/*global event, fdescribe*/
/*eslint no-restricted-globals: ["error", "event", "fdescribe"]*/

function onClick() {
    console.log(event);
}

fdescribe("foo", function() {
});

Примеры правильного кода для указанного имени глобальной переменной "event":

Открыть в Playground
/*global event*/
/*eslint no-restricted-globals: ["error", "event"]*/

import event from "event-module";
Открыть в Playground
/*global event*/
/*eslint no-restricted-globals: ["error", "event"]*/

const event = 1;

Примеры неправильного кода для указанного имени глобальной переменной "event" с пользовательским сообщением об ошибке:

Открыть в Playground
/*global event*/
/* eslint no-restricted-globals: ["error", { name: "event", message: "Use local parameter instead." }] */

function onClick() {
    console.log(event);    // Unexpected global variable 'event'. Use local parameter instead.
}

globals

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

Примеры неправильного кода для имён глобальных переменных "event" и "fdescribe":

Открыть в Playground
/*global event, fdescribe*/
/*eslint no-restricted-globals: ["error", { globals: ["event", "fdescribe"] }]*/

function onClick() {
    console.log(event);
}

fdescribe("foo", function() {
});

Для конкретной глобальной переменной можно также задать пользовательское сообщение в массиве globals, используя объекты со свойствами name и message:

Примеры неправильного кода для имени глобальной переменной "event" с пользовательским сообщением об ошибке:

Открыть в Playground
/*global event*/
/* eslint no-restricted-globals: ["error", { globals: [{ name: "event", message: "Use local parameter instead." }] }] */

function onClick() {
    console.log(event);
}

checkGlobalObject

Логический параметр, включающий обнаружение запрещённых глобальных переменных, доступ к которым осуществляется через глобальные объекты. Значение по умолчанию — false.

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

Открыть в Playground
/*global globalThis, self, window*/
/*eslint no-restricted-globals: ["error", { globals: ["Promise"], checkGlobalObject: true }]*/

globalThis.Promise
self.Promise
window.Promise

globalObjects

Параметр-массив, задающий дополнительные имена глобальных объектов для проверки, когда включён параметр checkGlobalObject. По умолчанию правило проверяет следующие глобальные объекты: globalThis, self и window.

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

Открыть в Playground
/*global globalThis, self, window, myGlobal*/
/*eslint no-restricted-globals: ["error", {
    globals: ["Promise"],
    checkGlobalObject: true,
    globalObjects: ["myGlobal"]
}]*/

globalThis.Promise
self.Promise
window.Promise
myGlobal.Promise;

Запрещённые глобальные переменные, используемые в аннотациях типов TypeScript — например, в ссылках на типы, наследовании интерфейсов или реализации классов, — игнорируются этим правилом.

Примеры правильного кода TypeScript для имён глобальных переменных “Promise”, “Event” и “Window”:

Открыть в Playground
/*eslint no-restricted-globals: ["error", "Promise", "Event", "Window"]*/

const fetchData: Promise<string> = fetchString();

interface CustomEvent extends Event {}

class CustomWindow implements Window {}

function handleClick(event: Event) {
  console.log(event);
}

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

  • no-restricted-properties
  • no-restricted-syntax

Версия

Это правило появилось в ESLint v2.3.0.

Ресурсы

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

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

Spec-Zone.ru

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