You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript代码错误被@typescript-eslint与ESLint重复上报的修复问询

问题描述

我的TypeScript代码里每个错误都会被@typescript-eslint和ESLint重复上报,看起来ESLint同时启用了两套规则,该怎么修复?我用的是VSCode的ESLint和Prettier扩展。

我的package.json依赖:

"devDependencies": {
    "@typescript-eslint/eslint-plugin": "^4.29.3",
    "@typescript-eslint/parser": "^4.29.3",
    "@vue/eslint-config-typescript": "^11.0.0",
    "eslint": "^7.32.0",
    "eslint-config-airbnb-base": "^15.0.0",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-import": "^2.24.2",
    "eslint-plugin-prettier": "^4.0.0",
    "eslint-plugin-vue": "^9.2.0",
    "eslint-plugin-vue-scoped-css": "^2.2.0",
    "prettier": "^2.4.1",
    "typescript": "~4.8.4",
},

我的.eslintrc配置:

{
  "extends": [
    "plugin:@typescript-eslint/recommended",
    "eslint-config-airbnb-base",
    "@vue/typescript/recommended",
    "plugin:vue/vue3-recommended",
    "plugin:vue-scoped-css/base",
    "plugin:prettier/recommended"
  ],
  "env": {
    "browser": true,
    "node": true,
    "jest": true,
    "es6": true
  },
  "globals": {
    "defineProps": "readonly",
    "defineEmits": "readonly"
  },
  "plugins": ["vue", "@typescript-eslint"],
  "parserOptions": {
    "parser": "@typescript-eslint/parser",
    "sourceType": "module",
    "allowImportExportEverywhere": true,
    "ecmaFeatures": {
      "jsx": true
    }
  },
  "settings": {
    "import/extensions": [".js", ".jsx", ".ts", ".tsx"]
  },
  "rules": {
    "no-console": "off",
    "no-continue": "off",
    "no-restricted-syntax": "off",
    "no-plusplus": "off",
    "no-param-reassign": "off",
    "no-shadow": "off",
    "guard-for-in": "off",

    "import/extensions": "off",
    "import/no-unresolved": "off",
    "import/no-extraneous-dependencies": "off",
    "import/prefer-default-export": "off",
    "import/first": "off",
    "@typescript-eslint/no-explicit-any": "off",
    "@typescript-eslint/explicit-module-boundary-types": "off",
    "vue/first-attribute-linebreak": 0,

    "@typescript-eslint/no-unused-vars": [
      "error",
      {
        "argsIgnorePattern": "^_",
        "varsIgnorePattern": "^_"
      }
    ],
    "no-unused-vars": [
      "error",
      {
        "argsIgnorePattern": "^_",
        "varsIgnorePattern": "^_"
      }
    ],
    "no-use-before-define": "off",
    "@typescript-eslint/no-use-before-define": "off",
    "@typescript-eslint/ban-ts-comment": "off",
    "@typescript-eslint/ban-types": "off",
    "class-methods-use-this": "off" 
  },
  "overrides": [
    {
      "files": ["*.vue"],
      "rules": {
        "vue/component-name-in-template-casing": [2, "kebab-case"],
        "vue/require-default-prop": 0,
        "vue/multi-word-component-names": 0,
        "vue/no-reserved-props": 0,
        "vue/no-v-html": 0,
        "vue-scoped-css/enforce-style-type": ["error", { "allows": ["scoped"] }]
      }
    }
  ]
}
修复方案

1. 关闭原生ESLint的重复规则

TypeScript项目中,@typescript-eslint插件提供了原生ESLint规则的增强版本(比如@typescript-eslint/no-unused-vars对应原生no-unused-vars),同时启用两套会导致重复报错。

修改.eslintrc的rules部分,删除原生ESLint的no-unused-vars规则,只保留@typescript-eslint版本:

"rules": {
  // ... 其他规则不变
  "@typescript-eslint/no-unused-vars": [
    "error",
    {
      "argsIgnorePattern": "^_",
      "varsIgnorePattern": "^_"
    }
  ],
  // 移除以下原生规则配置
  // "no-unused-vars": [
  //   "error",
  //   {
  //     "argsIgnorePattern": "^_",
  //     "varsIgnorePattern": "^_"
  //   }
  // ],
  // ... 其他规则不变
}

2. 清理extends中的重复继承

你的extends数组同时包含plugin:@typescript-eslint/recommended和@vue/typescript/recommended,后者已经继承了前者的规则,重复引入会导致规则叠加。

修改.eslintrc的extends,移除plugin:@typescript-eslint/recommended:

"extends": [
  // 移除该行
  // "plugin:@typescript-eslint/recommended",
  "eslint-config-airbnb-base",
  "@vue/typescript/recommended",
  "plugin:vue/vue3-recommended",
  "plugin:vue-scoped-css/base",
  "plugin:prettier/recommended"
],

3. 替换Airbnb规则为TypeScript适配版

eslint-config-airbnb-base是针对JavaScript的规则集,在TypeScript项目中需要使用专属版本避免冲突。先安装依赖:

npm install eslint-config-airbnb-typescript --save-dev

然后修改extends,将eslint-config-airbnb-base替换为airbnb-typescript/base:

"extends": [
  "airbnb-typescript/base",
  "@vue/typescript/recommended",
  "plugin:vue/vue3-recommended",
  "plugin:vue-scoped-css/base",
  "plugin:prettier/recommended"
],

4. 重启ESLint服务

修改配置后,按Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(Mac)打开VSCode命令面板,输入ESLint: Restart ESLint Server,重启服务让配置生效。


内容的提问来源于stack exchange,提问作者肉蛋充肌

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 22:02:21