Varför kastar ESLint 'no-unused-vars' för TypeScript-gränssnitt?


Så, jag har den här kodbiten i en .ts-fil:

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

export default class MicroEvent implements MicroEventInterface {

// code

Och ESLint ger detta fel:

Jag har denna konfiguration för TypeScript i ESLint:

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'
        }
    }
}

Så, allt verkar vara bra, men jag kan inte övervinna det här felet.

Några förslag?

Tack!

UPD:

Det ser ut som om jag console.log( --- , MicroEventInterface); felet försvinner. Jag tror att ESLint inte behandlar implements som faktisk användning.

Svar #1

Källa: Jag är underhållaren av typescript-eslint-projektet.

Den senaste versionen av @typescript-eslint-verktygen har nu fullständigt stöd för scopesanalys.

Så stegen för att fixa detta är nu:

  • uppdatera dina versioner till minst v4.9.1 av @typescript-eslint/parser och @typescript-eslint/eslint-plugin
  • uppdatera din ESLint-version till minst v6.0.0
  • uppdatera din konfiguration för att använda @typescript-eslint/no-unused-vars

    • Använd inte basregeln no-unused-vars - se den här FAQ-artikeln i projektet.

Start om din IDE så bör du nu se de korrekta lint-felen.

Svar #2

lägg till detta i Eslint-regler

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

Svar #3

Använd @typescript-eslint/no-unused-vars-experimental och stäng av @typescript-eslint/no-unused-vars.

Problemet är löst i den senare versionen (experimentell).

Exempelkonfiguration:

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

Relaterade artiklar