Spec-Zone.ru › ESLint

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":

Открыть в Playground
/*eslint no-restricted-exports: ["error", {
    "restrictedNamedExports": ["foo", "bar", "Baz", "a", "b", "c", "d", "e", "👍"]
}]*/

export const foo = 1;

export function bar() {}

export class Baz {}

const a = {};
export { a };

function someFunction() {}
export { someFunction as b };

export { c } from "some_module";

export { "d" } from "some_module";

export { something as e } from "some_module";

export { "👍" } from "some_module";

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

Открыть в Playground
/*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"]:

Открыть в Playground
/*eslint no-restricted-exports: ["error", { "restrictedNamedExports": ["default"] }]*/

function foo() {}

export { foo as default };
Открыть в Playground
/*eslint no-restricted-exports: ["error", { "restrictedNamedExports": ["default"] }]*/

export { default } from "some_module";

Примеры дополнительного правильного кода для параметра "restrictedNamedExports": ["default"]:

Открыть в Playground
/*eslint no-restricted-exports: ["error", { "restrictedNamedExports": ["default", "foo"] }]*/

export default function foo() {}

restrictedNamedExportsPattern

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

Открыть в Playground
/*eslint no-restricted-exports: ["error", {
    "restrictedNamedExportsPattern": "bar$"
}]*/

export const foobar = 1;

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

Открыть в Playground
/*eslint no-restricted-exports: ["error", {
    "restrictedNamedExportsPattern": "bar$"
}]*/

export const abc = 1;

Обратите внимание: этот параметр не применяется к export default или каким-либо именованным экспортам default. Чтобы также ограничить экспорты default, используйте параметр restrictDefaultExports.

restrictDefaultExports

Этот параметр позволяет ограничить некоторые объявления default. Он действует, только если параметр restrictedNamedExports не содержит значение "default". Этот параметр принимает следующие свойства:

direct

Примеры неправильного кода для параметра "restrictDefaultExports": { "direct": true }:

Открыть в Playground
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "direct": true } }]*/

export default foo;
Открыть в Playground
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "direct": true } }]*/

export default 42;
Открыть в Playground
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "direct": true } }]*/

export default function foo() {}

named

Примеры неправильного кода для параметра "restrictDefaultExports": { "named": true }:

Открыть в Playground
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "named": true } }]*/

const foo = 123;

export { foo as default };

defaultFrom

Примеры неправильного кода для параметра "restrictDefaultExports": { "defaultFrom": true }:

Открыть в Playground
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "defaultFrom": true } }]*/

export { default } from 'foo';
Открыть в Playground
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "defaultFrom": true } }]*/

export { default as default } from 'foo';

namedFrom

Примеры неправильного кода для параметра "restrictDefaultExports": { "namedFrom": true }:

Открыть в Playground
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "namedFrom": true } }]*/

export { foo as default } from 'foo';

namespaceFrom

Примеры неправильного кода для параметра "restrictDefaultExports": { "namespaceFrom": true }:

Открыть в Playground
/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "namespaceFrom": true } }]*/

export * as default 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

Spec-Zone.ru

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