no-restricted-exports
UnreleasedConfiguration
Rule Details
In a project, certain names may be disallowed from being used as exported names for various reasons.
This rule disallows specified names from being used as exported names.
Options
By default, this rule doesn't disallow any names. Only the names you specify in the configuration will be disallowed.
This rule has an object option:
"restrictedNamedExports"is an array of strings, where each string is a name to be restricted."restrictedNamedExportsPattern"is a string representing a regular expression pattern. Named exports matching this pattern will be restricted. This option does not apply todefaultnamed exports."restrictDefaultExports"is an object option with boolean properties to restrict certain default export declarations. The option works only if therestrictedNamedExportsoption does not contain the"default"value. The following properties are allowed:direct: restrictsexport defaultdeclarations.named: restrictsexport { foo as default };declarations.defaultFrom: restrictsexport { default } from 'foo';declarations.namedFrom: restrictsexport { foo as default } from 'foo';declarations.namespaceFrom: restrictsexport * as default from 'foo';declarations.
restrictedNamedExports
Examples of incorrect code for the "restrictedNamedExports" option:
Examples of correct code for the "restrictedNamedExports" option:
Default exports
By design, the "restrictedNamedExports" option doesn't disallow export default declarations. If you configure "default" as a restricted name, that restriction will apply only to named export declarations.
Examples of additional incorrect code for the "restrictedNamedExports": ["default"] option:
Examples of additional correct code for the "restrictedNamedExports": ["default"] option:
restrictedNamedExportsPattern
Example of incorrect code for the "restrictedNamedExportsPattern" option:
Example of correct code for the "restrictedNamedExportsPattern" option:
Note that this option does not apply to export default or any default named exports. If you want to also restrict default exports, use the restrictDefaultExports option.
restrictDefaultExports
This option allows you to restrict certain default declarations. The option works only if the restrictedNamedExports option does not contain the "default" value. This option accepts the following properties:
direct
Examples of incorrect code for the "restrictDefaultExports": { "direct": true } option:
named
Examples of incorrect code for the "restrictDefaultExports": { "named": true } option:
defaultFrom
Examples of incorrect code for the "restrictDefaultExports": { "defaultFrom": true } option:
namedFrom
Examples of incorrect code for the "restrictDefaultExports": { "namedFrom": true } option:
namespaceFrom
Examples of incorrect code for the "restrictDefaultExports": { "namespaceFrom": true } option:
Known Limitations
This rule doesn't inspect the content of source modules in re-export declarations. In particular, if you are re-exporting everything from another module's export, that export may include a restricted name. This rule cannot detect such cases.
This rule inspects named export declarations purely syntactically, matching ESLint's behavior: named exports of TypeScript-only declarations (interface, type, enum) are not checked, but export type { name } re-export specifiers are checked the same as value exports. A named export of a function declaration with no body is treated the same way, so overload signatures, export declare function, and the function declarations of a .d.ts are left to the implementation signature that carries the body.
export default interface Foo {} is a default export, and so is governed by restrictDefaultExports.direct rather than by restrictedNamedExports.