Eslint解析错误:加载无效接口的TypeScript作为解析器问题求助
问题解决:TypeScript文件导入语句的ESLint解析错误及Lint失效问题
问题描述
所有.ts文件的首行导入语句均出现以下错误:
Resolve error: typescript with invalid interface loaded as resolvereslintimport/namespace Resolve error: typescript with invalid interface loaded as resolvereslintimport/order Resolve error: typescript with invalid interface loaded as resolvereslintimport/no-duplicates Resolve error: typescript with invalid interface loaded as resolvereslintimport/extensions Resolve error: typescript with invalid interface loaded as resolvereslintimport/default Resolve error: typescript with invalid interface loaded as resolvereslintimport/no-named-as-default Resolve error: typescript with invalid interface loaded as resolvereslintimport/no-named-as-default-member
执行yarn add -D eslint-import-resolver-typescript安装依赖并添加到ESLint配置后,整个Lint功能完全失效,无法进行代码检查。
问题分析
- 初始解析错误原因:
eslint-plugin-import默认无法正确解析TypeScript导入语法,需要eslint-import-resolver-typescript提供专门的TypeScript模块解析支持,未配置时会抛出接口不兼容错误。 - Lint失效原因:你的ESLint配置文件存在语法错误——孤立代码行
(require('./tsconfig.build.json').exclude)破坏了配置对象结构,导致ESLint无法正确加载配置。
解决方案
步骤1:修复配置文件语法错误
打开eslintrc.js,删除那行孤立的代码:
(`require('./tsconfig.build.json').exclude`)
这行代码不属于配置对象的任何属性,是导致Lint功能失效的核心原因。
步骤2:正确配置TypeScript解析器
修改settings中的import/resolver配置,添加typescript解析器并指定对应tsconfig路径(与overrides中的配置保持一致):
settings: { 'import/resolver': { typescript: { project: ['./tsconfig.json'], // 匹配overrides里的tsconfig路径 }, node: { extensions: ['.js', '.jsx', '.ts', '.tsx'], moduleDirectory: ['node_modules', 'src/'], }, }, },
注意:将
typescript解析器放在node之前,确保ESLint优先用TypeScript规则解析.ts文件。
步骤3:验证依赖兼容性(可选)
若存在版本不匹配问题,执行以下命令重新安装相关依赖:
yarn remove eslint-import-resolver-typescript yarn add -D eslint-import-resolver-typescript eslint-plugin-import @typescript-eslint/parser @typescript-eslint/eslint-plugin
步骤4:优化规则配置(可选)
配置好解析器后,可将import/no-unresolved规则恢复为error级别,让ESLint检查未解析的导入:
rules: { // ...其他规则 'import/no-unresolved': 'error', }
最终完整配置示例
module.exports = { root: true, env: { node: true, es2022: true, }, parserOptions: { sourceType: 'module', }, extends: [ 'eslint:recommended', 'plugin:import/errors', 'plugin:import/warnings', 'plugin:promise/recommended', 'plugin:prettier/recommended', ], parser: '@typescript-eslint/parser', plugins: ['@typescript-eslint/eslint-plugin'], overrides: [ { files: ['*.ts', '*.d.ts'], parser: '@typescript-eslint/parser', parserOptions: { tsconfigRootDir: __dirname, project: ['./tsconfig.json'], }, extends: [ 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-requiring-type-checking', 'plugin:import/typescript', ], }, ], settings: { 'import/resolver': { typescript: { project: ['./tsconfig.json'], }, node: { extensions: ['.js', '.jsx', '.ts', '.tsx'], moduleDirectory: ['node_modules', 'src/'], }, }, }, ignorePatterns: ['node_modules', 'dist'], rules: { 'import/extensions': [ 'error', 'ignorePackages', { ts: 'never', 'd.ts': 'never', }, ], 'import/order': [ 'error', { groups: [ 'builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type', ], 'newlines-between': 'always', alphabetize: { order: 'asc', }, }, ], 'import/no-unresolved': 'error', }, };
内容的提问来源于stack exchange,提问作者kakakakakakakk
相关产品推荐
相关产品推荐

