Spec-Zone.ru › ESLint

Запрет на определённые свойства

Запрет определённых свойств на определённых объектах

В кодовой базе могут быть запрещены определённые свойства объектов. Это полезно для устаревания API или ограничения использования методов модуля. Например, вы можете запретить использование describe.only при использовании Mocha или попросить людей использовать Object.assign вместо _.extend.

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

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

Параметры

Это правило принимает список объектов, где указаны имя объекта и имена свойств:

{
    "rules": {
        "no-restricted-properties": [2, {
            "object": "disallowedObjectName",
            "property": "disallowedPropertyName"
        }]
    }
}

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

{
    "rules": {
        "no-restricted-properties": [2, {
            "object": "disallowedObjectName",
            "property": "disallowedPropertyName"
        }, {
            "object": "disallowedObjectName",
            "property": "anotherDisallowedPropertyName",
            "message": "Please use allowedObjectName.allowedPropertyName."
        }]
    }
}

Если имя объекта опущено, свойство запрещено для всех объектов:

{
    "rules": {
        "no-restricted-properties": [2, {
            "property": "__defineGetter__",
            "message": "Please use Object.defineProperty instead."
        }]
    }
}

Если имя свойства опущено, доступ к любому свойству данного объекта запрещён:

{
    "rules": {
        "no-restricted-properties": [2, {
            "object": "require",
            "message": "Please call require() directly."
        }]
    }
}

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

Открыть в Playground
/* eslint no-restricted-properties: [2, {
    "object": "disallowedObjectName",
    "property": "disallowedPropertyName"
}] */

var example = disallowedObjectName.disallowedPropertyName; /*error Disallowed object property: disallowedObjectName.disallowedPropertyName.*/

disallowedObjectName.disallowedPropertyName(); /*error Disallowed object property: disallowedObjectName.disallowedPropertyName.*/
Открыть в Playground
/* eslint no-restricted-properties: [2, {
    "property": "__defineGetter__"
}] */

foo.__defineGetter__(bar, baz);

const { __defineGetter__ } = qux();

({ __defineGetter__ }) => {};
Открыть в Playground
/* eslint no-restricted-properties: [2, {
    "object": "require"
}] */

require.resolve('foo');

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

Открыть в Playground
/* eslint no-restricted-properties: [2, {
    "object": "disallowedObjectName",
    "property": "disallowedPropertyName"
}] */

var example = disallowedObjectName.somePropertyName;

allowedObjectName.disallowedPropertyName();
Открыть в Playground
/* eslint no-restricted-properties: [2, {
    "object": "require"
}] */

require('foo');

Когда не следует использовать

Если у вас нет комбинаций объект/свойство для ограничения, не следует использовать это правило.

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

  • no-restricted-globals
  • no-restricted-syntax

Версия

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

Ресурсы

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

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

Spec-Zone.ru

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