@typescript-eslint/no-unused-vars 类型声明中的误报

新手上路,请多包涵

@typescript-eslint/no-unused-vars 存在一个问题。所以,我们有类型

type SomeType = (name: string) => void;

我们在带有类型声明的字符串中有 @typescript-eslint/no-unused-vars 错误, 它说 ‘name’ is defined but never used

类型用法示例:

 export const LogSomeInfo: SomeType = (name: string) => {
    const a = name;
    console.log(a);
};

或者:

 interface CheckboxPropsType {
    value: string,
    onClick(value: string): void
}

并且 eslint 在 onClick… 字符串处中断,表示该值已定义但从未使用过。即使类型分配正确并且实际的 onClick 处理程序使用该值!

问题:这条规则有什么问题,为什么会在这种情况下触发。为什么 eslint 将类型/接口中函数的类型声明识别为常规函数?我的eslint配置有问题吗?

“eslint”:“^7.7.0”, “@typescript-eslint/eslint-plugin”:“^3.6.1”,“@typescript-eslint/parser”:“^4.0.1”,“eslint-config- airbnb-typescript”: “^9.0.0”,

 {
  "extends": [
    "airbnb-typescript",
    "airbnb/hooks",
    "plugin:react/recommended",
    "plugin:@typescript-eslint/recommended"
  ],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaFeatures": {
      "jsx": true
    },
    "ecmaVersion": 2018,
    "sourceType": "module",
    "project": "./tsconfig.json"
  },
  "settings": {
    "react": {
      "version": "detect"
    }
  },
  "plugins": ["@typescript-eslint", "react-hooks", "react"],
  "env": {
    "browser": true
  },
  "rules": {
    "object-curly-newline": 0,
    "import/named": ["error"],
    "indent": ["error", 4],
    "react/jsx-indent": ["error", 4],
    "comma-dangle": ["error", "never"],
    "import/prefer-default-export": "off",
    "react/jsx-fragments": "off",
    "arrow-body-style": "off",
    "object-curly-spacing": "off",
    "@typescript-eslint/indent": ["error", 4, {"SwitchCase": 1}],
    "@typescript-eslint/explicit-module-boundary-types": "off",
    "no-undef": "error",
    "react/jsx-indent-props": ["error", 4],
    "max-len": ["error", { "code": 120 }],
    "react/prop-types": "off"
  }
}

原文由 Aleksandr Solovey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.1k
2 个回答

资料来源:我是 typescript-eslint 项目的维护者。

如果您将 @typescript-eslint/parser@typescript-eslint/eslint-plugin 的版本更新到 v4.1.0,您将能够使用最新的更改,这些更改使 @typescript-eslint/no-unused-vars 适用于所有情况


顺便说一句 - 使用插件的 v3.x 但解析器的 v4.x 会让你进入一个非常奇怪的状态,具有未定义和不受支持的行为。

您应该确保始终使用 两个 包的相同版本,因为每个版本都是一起发布的。

原文由 Brad Zacher 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题