no-restricted-exports
Запрещает указанные имена в экспортах
В проекте использование определённых имён в качестве экспортируемых может быть запрещено по разным причинам.
Описание правила
Это правило запрещает использовать указанные имена в качестве экспортируемых.
Параметры
По умолчанию это правило не запрещает никакие имена. Запрещены будут только имена, указанные в конфигурации.
У этого правила есть параметр-объект:
-
"restrictedNamedExports"— массив строк, каждая из которых представляет имя, использование которого нужно ограничить. -
"restrictedNamedExportsPattern"— строка, представляющая шаблон регулярного выражения. Именованные экспорты, соответствующие этому шаблону, будут запрещены. Этот параметр не применяется к экспортамdefault. -
"restrictDefaultExports"— параметр-объект с логическими свойствами для ограничения определённых объявлений экспорта по умолчанию. Параметр действует, только если параметрrestrictedNamedExportsне содержит значение"default". Допустимы следующие свойства:-
direct: ограничивает объявленияexport default. -
named: ограничивает объявленияexport { foo as default };. -
defaultFrom: ограничивает объявленияexport { default } from 'foo';. -
namedFrom: ограничивает объявленияexport { foo as default } from 'foo';. -
namespaceFrom: ограничивает объявленияexport * as default from 'foo';.
-
restrictedNamedExports
Примеры неправильного кода для параметра "restrictedNamedExports":
/*eslint no-restricted-exports: ["error", {
"restrictedNamedExports": ["foo", "bar", "Baz", "a", "b", "c", "d", "e", "👍"]
}]*/
export const = 1;
export function () {}
export class {}
const a = {};
export { };
function someFunction() {}
export { someFunction as };
export { } from "some_module";
export { } from "some_module";
export { something as } from "some_module";
export { } from "some_module";
Примеры правильного кода для параметра "restrictedNamedExports":
/*eslint no-restricted-exports: ["error", {
"restrictedNamedExports": ["foo", "bar", "Baz", "a", "b", "c", "d", "e", "👍"]
}]*/
export const quux = 1;
export function myFunction() {}
export class MyClass {}
const a = {};
export { a as myObject };
function someFunction() {}
export { someFunction };
export { c as someName } from "some_module";
export { "d" as " d " } from "some_module";
export { something } from "some_module";
export { "👍" as thumbsUp } from "some_module";
Экспорты по умолчанию
По замыслу, параметр "restrictedNamedExports" не запрещает объявления export default. Если настроить "default" как запрещённое имя, это ограничение будет применяться только к объявлениям именованного экспорта.
Примеры дополнительного неправильного кода для параметра "restrictedNamedExports": ["default"]:
/*eslint no-restricted-exports: ["error", { "restrictedNamedExports": ["default"] }]*/
function foo() {}
export { foo as };
/*eslint no-restricted-exports: ["error", { "restrictedNamedExports": ["default"] }]*/
export { } from "some_module";
Примеры дополнительного правильного кода для параметра "restrictedNamedExports": ["default"]:
/*eslint no-restricted-exports: ["error", { "restrictedNamedExports": ["default", "foo"] }]*/
export default function foo() {}
restrictedNamedExportsPattern
Пример неправильного кода для параметра "restrictedNamedExportsPattern":
/*eslint no-restricted-exports: ["error", {
"restrictedNamedExportsPattern": "bar$"
}]*/
export const = 1;
Пример правильного кода для параметра "restrictedNamedExportsPattern":
/*eslint no-restricted-exports: ["error", {
"restrictedNamedExportsPattern": "bar$"
}]*/
export const abc = 1;
Обратите внимание: этот параметр не применяется к export default или каким-либо именованным экспортам default. Чтобы также ограничить экспорты default, используйте параметр restrictDefaultExports.
restrictDefaultExports
Этот параметр позволяет ограничить некоторые объявления default. Он действует, только если параметр restrictedNamedExports не содержит значение "default". Этот параметр принимает следующие свойства:
direct
Примеры неправильного кода для параметра "restrictDefaultExports": { "direct": true }:
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "direct": true } }]*/
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "direct": true } }]*/
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "direct": true } }]*/
named
Примеры неправильного кода для параметра "restrictDefaultExports": { "named": true }:
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "named": true } }]*/
const foo = 123;
export { foo as };
defaultFrom
Примеры неправильного кода для параметра "restrictDefaultExports": { "defaultFrom": true }:
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "defaultFrom": true } }]*/
export { } from 'foo';
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "defaultFrom": true } }]*/
export { default as } from 'foo';
namedFrom
Примеры неправильного кода для параметра "restrictDefaultExports": { "namedFrom": true }:
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "namedFrom": true } }]*/
export { foo as } from 'foo';
namespaceFrom
Примеры неправильного кода для параметра "restrictDefaultExports": { "namespaceFrom": true }:
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "namespaceFrom": true } }]*/
export * as from 'foo';
Известные ограничения
Это правило не проверяет содержимое исходных модулей в объявлениях повторного экспорта. В частности, при повторном экспорте всего содержимого другого модуля в этом экспорте может присутствовать запрещённое имя. Правило не может обнаружить такие случаи.
//----- some_module.js -----
export function foo() {}
//----- my_module.js -----
/*eslint no-restricted-exports: ["error", { "restrictedNamedExports": ["foo"] }]*/
export * from "some_module"; // allowed, although this declaration exports "foo" from my_module
Версия
Это правило появилось в ESLint v7.0.0-alpha.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-restricted-exports