为什么ESLint为TypeScript接口抛出“ no-unused-vars”?

时间:2019-04-23 08:41:47

标签: typescript eslint

所以,我在.ts文件中有这段代码:

import {MicroEventInterface} from '../Interfaces';

export default class MicroEvent implements MicroEventInterface {

// code

ESLint会引发此错误:

error

我在ESLint中具有TypeScript的配置:

typescript: {
    extends: [
        'plugin:@private/private/react' // private rep with React config
    ],
    parser: '@typescript-eslint/parser',
    plugins: [
        '@typescript-eslint',
        'import'
    ],
    settings: {
        'import/resolver': {
            'node': {
                'extensions': [
                    '.js',
                    '.jsx',
                    '.ts',
                    '.tsx'
                ],
                'moduleDirectory': [
                    'node_modules/',
                    'src/'
                ]
            }
        },
        react: {
            createClass: 'createClass',
            pragma: 'React',
            version: '0.14.9'
        }
    }
}

所以,一切似乎都很好,但我无法克服这个错误。

有什么建议吗?

谢谢!

UPD:

好像我的console.log( --- , MicroEventInterface);错误消失了。我认为,ESLint不会将implements视为实际用法。

5 个答案:

答案 0 :(得分:16)

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

@typescript-eslint工具的最新版本现已全面支持范围分析。

现在可以解决此问题的步骤:

  • 将您的版本至少更新为@typescript-eslint/parser@typescript-eslint/eslint-plugin的v4.1.0
  • 将您的ESLint版本更新为至少v7.5.0
  • 更新您的配置以使用@typescript-eslint/no-unused-vars

重新启动您的IDE,现在您应该看到正确的棉绒错误。

答案 1 :(得分:15)

使用@typescript-eslint/no-unused-vars-experimental并关闭@typescript-eslint/no-unused-vars

该问题已在后一版本中得到解决(实验性)。

示例配置:

// .eslintrc
{
  ...
  "rules": {
    "@typescript-eslint/no-unused-vars": "off",
    "@typescript-eslint/no-unused-vars-experimental": "error"
  }
  ...
}

答案 2 :(得分:10)

将此添加到Eslint规则

"rules": { "@typescript-eslint/no-unused-vars": [ 2, { "args": "none" } ] }

答案 3 :(得分:1)

我相信解决此问题的正确方法是声明您的接口。

declare interface Foo {}

与其他类型(例如Foo.d.ts)一起在单独的文件中

然后,正确配置您的打字稿编译器以提取所有声明。

请参阅:https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

部分: @类型,类型根和类型

之后,您将可以使用所有类型声明和接口,而无需显式导入。

答案 4 :(得分:1)

要在纯TypeScript项目中解决此问题,我在eslint配置文件(.eslintrc.json)中添加了以下规则。为了使此特定解决方案起作用,必须遵循以下约定:接口名称以大写字母“ I”开头。

顺便说一下,其他工件(即类)的首字母大写“ I”在考虑是否在文件/模块中使用时将被忽略。

Eslint

...
    "rules": {
        ... other rules omitted ...,
        "no-unused-vars": [
            "warn",
            { 
                "vars": "all",
                "varsIgnorePattern": "[I]\\w+"
            }
        ]
    }
...

有关此规则的更多信息,请参见documentation