no-restricted-imports
Disallow specified modules when loaded by
import.
This rule extends the base eslint/no-restricted-imports rule. It adds support for the type import (import type X from "...", import { type X } from "...") and import x = require("...") syntaxes.
How to Use
- Flat Config
- Legacy Config
eslint.config.mjs
export default tseslint.config({
  rules: {
    // Note: you must disable the base rule as it can report incorrect errors
    "no-restricted-imports": "off",
    "@typescript-eslint/no-restricted-imports": "error"
  }
});
.eslintrc.cjs
module.exports = {
  "rules": {
    // Note: you must disable the base rule as it can report incorrect errors
    "no-restricted-imports": "off",
    "@typescript-eslint/no-restricted-imports": "error"
  }
};
Try this rule in the playground ↗
Options
See eslint/no-restricted-imports's options.
This rule adds the following options:
allowTypeImports
Whether to allow type-only imports for a path.
Default: false.
You can specify this option for a specific path or pattern as follows:
{
  "rules": {
    "@typescript-eslint/no-restricted-imports": [
      "error",
      {
        "paths": [
          {
            "name": "import-foo",
            "message": "Please use import-bar instead.",
            "allowTypeImports": true,
          },
          {
            "name": "import-baz",
            "message": "Please use import-quux instead.",
            "allowTypeImports": true,
          },
        ],
      },
    ],
  },
}
Whether to allow Type-Only Imports.
Examples of code with the above config:
- ❌ Incorrect
- ✅ Correct
import foo from 'import-foo';
export { Foo } from 'import-foo';
import baz from 'import-baz';
export { Baz } from 'import-baz';
import { foo } from 'other-module';
import type foo from 'import-foo';
export type { Foo } from 'import-foo';
import type baz from 'import-baz';
export type { Baz } from 'import-baz';