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 inpackage.json
- Notice
- Installation
- Configuration
- Options from
unrs-resolver - Contributing
- Sponsors and Backers
- Changelog
- License
- Star History
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.
# 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-typescript# 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-typescriptIf 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', ], }, }, }, }, ]Add the following to your .eslintrc config:
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
Default:
[ "types", "import", // APF: https://angular.io/guide/angular-package-format "esm2020", "es2020", "es2015", "require", "node", "node-addons", "browser", "default", ]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", ]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"], }Default:
[ "types", "typings", // APF: https://angular.io/guide/angular-package-format "fesm2020", "fesm2015", "esm2020", "es2020", "module", "jsnext:main", "main", ]You can pass through other options of unrs-resolver directly.
You can reuse defaultConditionNames, defaultExtensions, defaultExtensionAlias, and defaultMainFields by directly using require/import.
- 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.
| 1stG | RxTS | UnTS |
|---|---|---|
| 1stG | RxTS | UnTS |
|---|---|---|
Detailed changes for each release are documented in CHANGELOG.md.
{ "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", ], }, }, }, }