eslint-import-resolver-typescript
This is a resolver for eslint-plugin-import(-x) plugin, not an ESLint plugin itself, it adds TypeScript support to eslint-plugin-import. (Or maybe you want to try eslint-plugin-import-x for faster speed)
This means you can:
- import/- requirefiles with extension- .cts/- .mts/- .ts/- .tsx/- .d.cts/- .d.mts/- .d.ts
- Use pathsdefined intsconfig.json
- Prefer resolving @types/*definitions over plain.js/.jsx
- Multiple tsconfigs support, just like normal
- imports/exportsfields support in- package.json
TOC
- Notice
- Installation
- Configuration
- Options from unrs-resolver
- Contributing
- Sponsors and Backers
- Changelog
- License
- Star History
Notice
After version 2.0.0, .d.ts will take higher priority than normal .js/.jsx files on resolving node_modules packages in favor of @types/* definitions or its own definition.
If you're facing some problems with rules import/default or import/named from eslint-plugin-import, do not post any issue here, because they are working exactly as expected on our side. Take import-js/eslint-plugin-import#1525 as reference or post a new issue on eslint-plugin-import instead.
Installation
eslint-plugin-import-x
# npm
npm i -D eslint-plugin-import-x eslint-import-resolver-typescript
# pnpm
pnpm i -D eslint-plugin-import-x eslint-import-resolver-typescript
# yarn
yarn add -D eslint-plugin-import-x eslint-import-resolver-typescript
# bun
bun add -d eslint-plugin-import-x eslint-import-resolver-typescripteslint-plugin-import
# npm
npm i -D eslint-plugin-import eslint-import-resolver-typescript
# pnpm
pnpm i -D eslint-plugin-import eslint-import-resolver-typescript
# yarn
yarn add -D eslint-plugin-import eslint-import-resolver-typescript
# bun
bun add -d eslint-plugin-import eslint-import-resolver-typescriptConfiguration
eslint.config.js
If you are using eslint-plugin-import-x@>=4.5.0, you can use import/require to reference eslint-import-resolver-typescript directly in your ESLint flat config:
// eslint.config.js (CommonJS is also supported)
import { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript'
export default [
  {
    settings: {
      'import-x/resolver-next': [
        createTypeScriptImportResolver({
          alwaysTryTypes: true, // Always try to resolve types under `<root>@types` directory even if it doesn't contain any source code, like `@types/unist`
          bun: true, // Resolve Bun modules (https://github.com/import-js/eslint-import-resolver-typescript#bun)
          // Choose from one of the "project" configs below or omit to use <root>/tsconfig.json or <root>/jsconfig.json by default
          // Use <root>/path/to/folder/tsconfig.json or <root>/path/to/folder/jsconfig.json
          project: 'path/to/folder',
          // Multiple tsconfigs/jsconfigs (Useful for monorepos, but discouraged in favor of `references` supported)
          // Use a glob pattern
          project: 'packages/*/{ts,js}config.json',
          // Use an array
          project: [
            'packages/module-a/tsconfig.json',
            'packages/module-b/jsconfig.json',
          ],
          // Use an array of glob patterns
          project: [
            'packages/*/tsconfig.json',
            'other-packages/*/jsconfig.json',
          ],
        }),
      ],
    },
  },
]But if you are using eslint-plugin-import or the older version of eslint-plugin-import-x, you can't use require/import:
// eslint.config.js (CommonJS is also supported)
export default [
  {
    settings: {
      'import/resolver': {
        typescript: {
          alwaysTryTypes: true, // Always try to resolve types under `<root>@types` directory even if it doesn't contain any source code, like `@types/unist`
          bun: true, // Resolve Bun modules (https://github.com/import-js/eslint-import-resolver-typescript#bun)
          // Choose from one of the "project" configs below or omit to use <root>/tsconfig.json or <root>/jsconfig.json by default
          // Use <root>/path/to/folder/tsconfig.json or <root>/path/to/folder/jsconfig.json
          project: 'path/to/folder',
          // Multiple tsconfigs/jsconfigs (Useful for monorepos, but discouraged in favor of `references` supported)
          // Use a glob pattern
          project: 'packages/*/{ts,js}config.json',
          // Use an array
          project: [
            'packages/module-a/tsconfig.json',
            'packages/module-b/jsconfig.json',
          ],
          // Use an array of glob patterns
          project: [
            'packages/*/tsconfig.json',
            'other-packages/*/jsconfig.json',
          ],
        },
      },
    },
  },
].eslintrc
Add the following to your .eslintrc config:
{
  "plugins": ["import"],
  "rules": {
    // Turn on errors for missing imports
    "import/no-unresolved": "error",
  },
  "settings": {
    "import/parsers": {
      "@typescript-eslint/parser": [".ts", ".tsx"],
    },
    "import/resolver": {
      "typescript": {
        "alwaysTryTypes": true, // Always try to resolve types under `<root>@types` directory even if it doesn't contain any source code, like `@types/unist`
        "bun": true, // Resolve Bun modules (https://github.com/import-js/eslint-import-resolver-typescript#bun)
        // Choose from one of the "project" configs below or omit to use <root>/tsconfig.json or <root>/jsconfig.json by default
        // Use <root>/path/to/folder/tsconfig.json or <root>/path/to/folder/jsconfig.json
        "project": "path/to/folder",
        // Multiple tsconfigs (Useful for monorepos, but discouraged in favor of `references` supported)
        // Use a glob pattern
        "project": "packages/*/{ts,js}config.json",
        // Use an array
        "project": [
          "packages/module-a/tsconfig.json",
          "packages/module-b/jsconfig.json",
        ],
        // Use an array of glob patterns
        "project": [
          "packages/*/tsconfig.json",
          "other-packages/*/jsconfig.json",
        ],
      },
    },
  },
}Other environments
Bun
Bun provides built-in modules such as bun:test, which are not resolved by default.
Enable Bun built-in module resolution by choosing 1 out of these 3 options:
- Set the bun: trueoption, as shown in Configuration above.
- Run ESLint with bun --bun eslint.
- Configure run.buninbunfig.toml.
Options from unrs-resolver
conditionNames
Default:
[
  "types",
  "import",
  // APF: https://angular.io/guide/angular-package-format
  "esm2020",
  "es2020",
  "es2015",
  "require",
  "node",
  "node-addons",
  "browser",
  "default",
]extensions
Default:
[
  // `.mts`, `.cts`, `.d.mts`, `.d.cts`, `.mjs`, `.cjs` are not included because `.cjs` and `.mjs` must be used explicitly
  ".ts",
  ".tsx",
  ".d.ts",
  ".js",
  ".jsx",
  ".json",
  ".node",
]extensionAlias
Default:
{
  ".js": [
    ".ts",
    // `.tsx` can also be compiled as `.js`
    ".tsx",
    ".d.ts",
    ".js",
  ],
  ".ts": [".ts", ".d.ts", ".js"],
  ".jsx": [".tsx", ".d.ts", ".jsx"],
  ".tsx": [
    ".tsx",
    ".d.ts",
    ".jsx",
    // `.tsx` can also be compiled as `.js`
    ".js",
  ],
  ".cjs": [".cts", ".d.cts", ".cjs"],
  ".cts": [".cts", ".d.cts", ".cjs"],
  ".mjs": [".mts", ".d.mts", ".mjs"],
  ".mts": [".mts", ".d.mts", ".mjs"],
}mainFields
Default:
[
  "types",
  "typings",
  // APF: https://angular.io/guide/angular-package-format
  "fesm2020",
  "fesm2015",
  "esm2020",
  "es2020",
  "module",
  "jsnext:main",
  "main",
]Other options
You can pass through other options of unrs-resolver directly.
Default options
You can reuse defaultConditionNames, defaultExtensions, defaultExtensionAlias, and defaultMainFields by directly using require/import.
Contributing
- Make sure your change is covered by a test import.
- Make sure that yarn testpasses without a failure.
- Make sure that yarn lintpasses without conflicts.
- Make sure your code changes match our type-coverage settings: yarn type-coverage.
We have GitHub Actions, which will run the above commands on your PRs.
If either fails, we won't be able to merge your PR until it's fixed.
Sponsors and Backers
Sponsors
| 1stG | RxTS | UnTS | 
|---|---|---|
Backers
| 1stG | RxTS | UnTS | 
|---|---|---|
Changelog
Detailed changes for each release are documented in CHANGELOG.md.
 import-js
import-js