---
title: no-restricted-exports
-layout: doc
rule_type: suggestion
---
This rule has an object option:
* `"restrictedNamedExports"` is an array of strings, where each string is a name to be restricted.
+* `"restrictDefaultExports"` is an object option with boolean properties to restrict certain default export declarations. The option works only if the `restrictedNamedExports` option does not contain the `"default"` value. The following properties are allowed:
+ * `direct`: restricts `export default` declarations.
+ * `named`: restricts `export { foo as default };` declarations.
+ * `defaultFrom`: restricts `export { default } from 'foo';` declarations.
+ * `namedFrom`: restricts `export { foo as default } from 'foo';` declarations.
+ * `namespaceFrom`: restricts `export * as default from 'foo';` declarations.
-Examples of **incorrect** code for this rule:
+### restrictedNamedExports
+
+Examples of **incorrect** code for the `"restrictedNamedExports"` option:
::: incorrect
:::
-Examples of **correct** code for this rule:
+Examples of **correct** code for the `"restrictedNamedExports"` option:
::: correct
:::
-### Default exports
+#### Default exports
-By design, this rule doesn't disallow `export default` declarations. If you configure `"default"` as a restricted name, that restriction will apply only to named export declarations.
+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 this rule:
+Examples of additional **incorrect** code for the `"restrictedNamedExports": ["default"]` option:
::: incorrect
:::
-Examples of additional **correct** code for this rule:
+Examples of additional **correct** code for the `"restrictedNamedExports": ["default"]` option:
::: correct
:::
+### 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:
+
+::: incorrect
+
+```js
+/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "direct": true } }]*/
+
+export default foo;
+export default 42;
+export default function foo() {}
+```
+
+:::
+
+#### named
+
+Examples of **incorrect** code for the `"restrictDefaultExports": { "named": true }` option:
+
+::: incorrect
+
+```js
+/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "named": true } }]*/
+
+const foo = 123;
+
+export { foo as default };
+```
+
+:::
+
+#### defaultFrom
+
+Examples of **incorrect** code for the `"restrictDefaultExports": { "defaultFrom": true }` option:
+
+::: incorrect
+
+```js
+/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "defaultFrom": true } }]*/
+
+export { default } from 'foo';
+export { default as default } from 'foo';
+```
+
+:::
+
+#### namedFrom
+
+Examples of **incorrect** code for the `"restrictDefaultExports": { "namedFrom": true }` option:
+
+::: incorrect
+
+```js
+/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "namedFrom": true } }]*/
+
+export { foo as default } from 'foo';
+```
+
+:::
+
+#### namespaceFrom
+
+Examples of **incorrect** code for the `"restrictDefaultExports": { "namespaceFrom": true }` option:
+
+::: incorrect
+
+```js
+/*eslint no-restricted-exports: ["error", { "restrictDefaultExports": { "namespaceFrom": true } }]*/
+
+export * as default from 'foo';
+```
+
+:::
+
## 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.