Skip to content

import/namespace ​

💼 This rule is enabled in the following configs: ❗ errors, ☑️ recommended.

Enforces names exist at the time they are dereferenced, when imported as a full namespace (i.e. import * as foo from './foo'; foo.bar(); will report if bar is not exported by ./foo.).

Will report at the import declaration if there are no exported names found.

Also, will report for computed references (i.e. foo["bar"]()).

Reports on assignment to a member of an imported namespace.

Note: for packages, the plugin will find exported names from jsnext:main, if present in package.json. Redux's npm module includes this key, and thereby is lintable, for example.

A module path that is ignored or not unambiguously an ES module will not be reported when imported.

Rule Details ​

Currently, this rule does not check for possible redefinition of the namespace in an intermediate scope. Adherence to the ESLint no-shadow rule for namespaces will prevent this from being a problem.

For ES7, reports if an exported namespace would be empty (no names exported from the referenced module.)

Given:

js
// @module ./named-exports
export const a = 1
const b = 2
export { b }

const c = 3
export { c as d }

export class ExportedClass { }

// ES7
export * as deep from './deep'

and:

js
// @module ./deep
export const e = "MC2"

See what is valid and reported:

js
// @module ./foo
import * as names from './named-exports'

function great() {
  return names.a + names.b  // so great https://youtu.be/ei7mb8UxEl8
}

function notGreat() {
  doSomethingWith(names.c) // Reported: 'c' not found in imported namespace 'names'.

  const { a, b, c } = names // also reported, only for 'c'
}

// also tunnels through re-exported namespaces!
function deepTrouble() {
  doSomethingWith(names.deep.e) // fine
  doSomethingWith(names.deep.f) // Reported: 'f' not found in deeply imported namespace 'names.deep'.
}

Options ​

allowComputed ​

Defaults to false. When false, will report the following:

js
/*eslint import/namespace: [2, { allowComputed: false }]*/
import * as a from './a'

function f(x) {
  return a[x] // Unable to validate computed reference to imported namespace 'a'.
}

When set to true, the above computed namespace member reference is allowed, but still can't be statically analyzed any further.

Further Reading ​

Released under the Apache License 2.0.