eslint-import-resolver-typescript icon indicating copy to clipboard operation
eslint-import-resolver-typescript copied to clipboard

paths are not resolved in Solution Style (Project References) setup unless explicitly listed in project array

Open hypensterisk opened this issue 6 days ago • 2 comments

I am using a standard Vite + TypeScript setup which uses the "Solution Style" configuration (a root tsconfig.json that references tsconfig.app.json and tsconfig.node.json).

According to the [README](https://www.npmjs.com/package/eslint-import-resolver-typescript), using an array of projects is "discouraged in favor of references supported".

However, when I follow this advice and omit the project setting (or point it strictly to the root tsconfig.json), the resolver fails to read the paths defined in the referenced tsconfig.app.json. It appears the resolver does not traverse/merge the paths from the referenced projects into the current context.

To make it work, I am forced to use the "discouraged" array approach.

Reproduction

File Structure:

/
├── tsconfig.json (Root)
├── tsconfig.app.json (Contains paths)
├── tsconfig.node.json
└── src/
    └── components/
        └── StateButton.tsx

1. Root tsconfig.json

{
  "files": [],
  "references": [
    { "path": "./tsconfig.node.json" },
    { "path": "./tsconfig.app.json" }
  ]
}

2. tsconfig.app.json (Where paths are defined)

{
  "compilerOptions": {
    "paths": {
      "@components/*": ["./src/components/*"]
    }
    // ... other options
  },
  "include": ["src/**/*"]
}

3. ESLint Configuration (eslint.config.js) FAILING CONFIG (Following README advice):

settings: {
  'import-x/resolver-next': [
    createTypeScriptImportResolver({
      alwaysTryTypes: true,
      // Omitted 'project' (defaults to root tsconfig.json)
      // OR explicitly set to: project: "tsconfig.json"
    })
  ]
}

WORKING CONFIG (The "Discouraged" workaround):

settings: {
  'import-x/resolver-next': [
    createTypeScriptImportResolver({
      alwaysTryTypes: true,
      // Explicitly listing the referenced projects works
      project: [
        'tsconfig.app.json', 
        'tsconfig.node.json'
      ]
    })
  ]
}

Actual Behavior

When using the Failing Config, imports using aliases throw: import-x/no-unresolved: Unable to resolve path to module '@components/StateButton'

Expected Behavior

The resolver should detect that tsconfig.json uses references, parse the referenced configuration files (tsconfig.app.json), and resolve the paths aliases defined inside them without needing to manually list every project file in the ESLint settings.

hypensterisk avatar Dec 16 '25 09:12 hypensterisk