no-restricted-properties
Запрещает определённые свойства у определённых объектов
В кодовой базе можно запретить определённые свойства объектов. Это полезно, если нужно объявить 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."
}]
}
}
Чтобы глобально ограничить свойство, но разрешить его использование для определённых объектов, можно использовать параметр allowObjects:
{
"rules": {
"no-restricted-properties": [2, {
"property": "push",
"allowObjects": ["router"],
"message": "Prefer [...array, newValue] because it does not mutate the array in place."
}]
}
}
Чтобы ограничить все свойства объекта, кроме определённых, можно использовать параметр allowProperties:
{
"rules": {
"no-restricted-properties": [2, {
"object": "config",
"allowProperties": ["settings", "version"],
"message": "Accessing other properties is restricted."
}]
}
}
Обратите внимание, что параметр allowObjects нельзя использовать вместе с параметром object, поскольку они взаимоисключающие. Аналогично, параметр allowProperties нельзя использовать вместе с параметром property, поскольку они также взаимоисключающие.
Примеры неправильного кода для этого правила:
/* eslint no-restricted-properties: [2, {
"object": "disallowedObjectName",
"property": "disallowedPropertyName"
}] */
const example = ; /*error Disallowed object property: disallowedObjectName.disallowedPropertyName.*/
(); /*error Disallowed object property: disallowedObjectName.disallowedPropertyName.*/
/* eslint no-restricted-properties: [2, {
"property": "__defineGetter__"
}] */
(bar, baz);
const = qux();
() => {};
/* eslint no-restricted-properties: [2, {
"object": "require"
}] */
('foo');
/* eslint no-restricted-properties: [2, {
"property": "push",
"allowObjects": ["router"],
}] */
(5);
/* eslint no-restricted-properties: [2, {
"object": "config",
"allowProperties": ["settings", "version"]
}] */
= "12345";
= 5000;
Примеры правильного кода для этого правила:
/* eslint no-restricted-properties: [2, {
"object": "disallowedObjectName",
"property": "disallowedPropertyName"
}] */
const example = disallowedObjectName.somePropertyName;
allowedObjectName.disallowedPropertyName();
/* eslint no-restricted-properties: [2, {
"object": "require"
}] */
require('foo');
/* eslint no-restricted-properties: [2, {
"property": "push",
"allowObjects": ["router", "history"],
}] */
router.push('/home');
history.push('/about');
/* eslint no-restricted-properties: [2, {
"object": "config",
"allowProperties": ["settings", "version"]
}] */
config.settings = { theme: "dark" };
config.version = "1.0.0";
Когда не следует использовать это правило
Если у вас нет сочетаний объектов и свойств, которые нужно ограничить, не используйте это правило.
Связанные правила
Версия
Это правило появилось в ESLint v3.5.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-restricted-properties