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".
/*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".
/*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.
Ограничение экспортов по умолчанию
Этот параметр позволяет вам ограничить определённые default объявления. Параметр работает только если параметр restrictedNamedExports не содержит значение "default". Этот параметр принимает следующие свойства:
прямой
Примеры неправильного кода для параметра "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 } }]*/
именованный
Примеры неправильного кода для параметра "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