esLint-为打字稿配置“ no-unused-vars”

时间:2019-09-05 09:06:50

标签: typescript eslint

我在所有具有以下设置的Typescript项目中使用esLint:

"https://jsfiddle.net/cna65pmb/1/"

+一堆自定义规则。我还为Typescript支持安装了以下依赖项:

  "extends": ["airbnb", "prettier", 'plugin:vue/recommended'],
  "plugins": ["prettier"],
  "parserOptions": {
  "parser": "@typescript-eslint/parser",
  "ecmaVersion": 2018,
  "sourceType": "module"
  },

但是,esLint最有用的规则之一https://eslint.org/docs/rules/no-unused-vars对于Typescript项目似乎配置很差。例如,当我导出一个枚举时,该规则警告我该枚举在声明它的文件中未被使用:

    "@typescript-eslint/eslint-plugin": "^1.7.0",
    "@typescript-eslint/parser": "^1.7.0",

类似地,当我导入要用作类型的接口或类时,“ no-unused-vars”将再次在实际导入的行上抱怨:

在Foo.ts

export enum Foo {
   Bar,
}

在bar.ts

export interface Foo {
   bar: string;
}

是否可以通过配置no-unused-vars规则来考虑这两种情况?我不喜欢禁用该规则,因为在这些案例之外,它是我整个规则集中最有用的规则之一。

我已经将规则降级为仅给出警告而不是错误,但是将我所有的文档都填充有警告仍然无法达到使用esLint的目的。

按照建议的here,用// eslint-disable-line填充我的所有文档,这似乎是一个糟糕的解决方案。

7 个答案:

答案 0 :(得分:32)

我认为使用"plugin:@typescript-eslint/recommended"会引入许多不需要的规则。最好使用"@typescript-eslint/no-unused-vars" ESLint规则。

"rules": {
  "no-unused-vars": "off",
  "@typescript-eslint/no-unused-vars": [
    "error"
  ]
}

参考-https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-unused-vars.md

答案 1 :(得分:24)

在使用最新的TypeScript / ES-Lint版本时,我遇到了很多错误错误,我发现他们想出了一个修复损坏的no-unused-vars的实验规则,并提出了@typescript-eslint/no-unused-vars-experimental的实验规则。终于按我的预期工作了。

在我这边进行更改之前,在使用接口/类型时,我有多个错误错误,说这些变量未使用(当然,它们将永远不会被使用,因为它们不是变量,而是接口/类型)。 ..如果您对代码本身感到好奇,请在PR上添加此实验性规则,这也是我找到规则的方式。

这是我更新的.eslintrc文件的子集

{
  "parser": "@typescript-eslint/parser",
  "extends": [
    "plugin:@typescript-eslint/recommended"
  ],
  "rules": {
    "@typescript-eslint/no-unused-vars": "off",
    "@typescript-eslint/no-unused-vars-experimental": "error",
    "no-unused-vars": "off"
  }
}

现在我终于恢复正常了:)

答案 2 :(得分:8)

它有点埋在the documentation中,但是如果您在'extends'属性中添加了一些内容,则可以同时使用ESLint推荐的规则,例如no-unused-vars,并使其在Typescript中实际起作用。像这样:

"extends": [
        "eslint:recommended",
        "plugin:@typescript-eslint/eslint-recommended",
        "plugin:@typescript-eslint/recommended"
    ],

@ typescript-eslint / recommended似乎是允许eslint:recommended有效处理Typescript构造的东西。不确定它会如何影响您的其他扩展。

答案 3 :(得分:4)

我的问题是使用装饰器并希望有一个具有适当名称的变量以便清楚起见,例如:

@OneToMany((type) => Employee) 而不是 @OneToMany(() => Employee)

TypeScript 的常用解决方案是使用下划线作为前缀:

@OneToMany((_type) => Employee)

并且可以让 ESLint 接受相同的内容:

.eslintrc.js

module.exports = {
  ...
  rules: {
    '@typescript-eslint/no-unused-vars': ['warn', { 'argsIgnorePattern': '^_' }]
    ....
  },
};

答案 4 :(得分:0)

您将parser嵌套在parserOptions内部。应该是一个兄弟姐妹,像这样:

"parser": "@typescript-eslint/parser",
"parserOptions": {
    "ecmaVersion": 2018,
    "sourceType": "module"
},

对于no-unused-vars,恐怕这是@typescript-eslint的一个持续错误: https://github.com/typescript-eslint/typescript-eslint/issues/363

答案 5 :(得分:0)

几年后仍然出现同样的错误。尝试检查为什么它不起作用是令人沮丧的。在尝试了很多可能的配置之后,这里终于为我工作了。如果有人像我一样遇到困难!

eslintrc.js

module.exports = {
    env: {
        browser: true,
        node: true,
    },
    parser: "@typescript-eslint/parser",
    extends: [
        "eslint:recommended",
        "plugin:@typescript-eslint/eslint-recommended",
        "prettier",
        "plugin:prettier/recommended",
        "plugin:@typescript-eslint/recommended",
    ],
    parserOptions: {
        ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features
        project: "tsconfig.eslint.json",
        tsconfigRootDir: __dirname,
        sourceType: "module", // Allows for the use of imports
    },
    plugins: ["@typescript-eslint", "@typescript-eslint/tslint", "import", "unused-imports"],

    rules: {
        "@typescript-eslint/no-unused-vars": "off",
        "@typescript-eslint/no-unused-vars-experimental": "error",
        "no-unused-vars": "off",
        "import/order": "error",
        "no-console": ["warn", { allow: ["warn", "error"] }],
        eqeqeq: ["error", "always"],
        "no-else-return": "error",
    },
    settings: {
        "import/resolver": {
            node: {
                extensions: [".js", ".jsx", ".ts", ".tsx"],
                moduleDirectory: ["node_modules", "src/"],
            },
        },
    },
};

答案 6 :(得分:0)

@typescript-eslint/eslint-plugin@typescript-eslint/parser 从 3.x 升级到最新的 4.x 为我解决了这个问题。