@typescript-eslint/no-unused-vars не работает

.eslintrc.json:

{
  "root": true,
  "ignorePatterns": ["projects/**/*"],
  "overrides": [
    {
      "files": ["*.ts"],
      "extends": [
        "eslint:recommended",
        "plugin:@typescript-eslint/recommended",
        "plugin:@angular-eslint/recommended",
        "plugin:@angular-eslint/template/process-inline-templates",
        "plugin:prettier/recommended"
      ],
      "rules": {
        "no-unused-vars": "error",
        "@typescript-eslint/no-unused-vars": "error",
        "@typescript-eslint/explicit-member-accessibility": "error",
        "@angular-eslint/directive-selector": [
          "error",
          {
            "type": "attribute",
            "prefix": "app",
            "style": "camelCase"
          }
        ],
        "@angular-eslint/component-selector": [
          "error",
          {
            "type": "element",
            "prefix": "app",
            "style": "kebab-case"
          }
        ]
      }
    },
    {
      "files": ["*.html"],
      "extends": ["plugin:@angular-eslint/template/recommended"],
      "rules": {}
    },
    {
      "files": ["*.html"],
      "excludedFiles": ["*inline-template-*.component.html"],
      "extends": ["plugin:prettier/recommended"],
      "rules": {
        "prettier/prettier": ["error", { "parser": "angular" }]
      }
    }
  ]
}

угловая составляющая:

export class AppComponent {
  public title = 'angular-movieseat';
  public something = 'asd';

  public somethingFn() {
    console.info('something');
  }
}

something и somethingFn() никогда не используются, но ESlint не помечает их как неиспользуемые. Во всех вопросах, которые я прочитал, это должно решить следующее:

        "no-unused-vars": "error",
        "@typescript-eslint/no-unused-vars": "error",

Но это не так, какие-либо предложения, как пометить эти переменные класса как неиспользуемые? ESLint работает, так как требует правила explicit-member-accessibility.

Для завершения мой tsconfig.json

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "noImplicitOverride": true,
    "noPropertyAccessFromIndexSignature": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "ES2022",
    "module": "ES2022",
    "useDefineForClassFields": false,
    "lib": ["ES2022", "dom"],
  },
  "angularCompilerOptions": {
    "enableI18nLegacyMessageIdFormat": false,
    "strictInjectionParameters": true,
    "strictInputAccessModifiers": true,
    "strictTemplates": true
  }
}
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
141
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Angular немного отличается, потому что мы можем ссылаться на переменные и методы компонента внутри HTML-файла компонента, ESLint не может идентифицировать эти случаи, поэтому вы не получаете эту ошибку. Единственный способ сделать это — вручную проверить переменные и методы, сравнить их в файле HTML и TS и определить, используются ли они где-либо.

Примечание. Лучше всего выполнить глобальный поиск имени переменной, чтобы найти все варианты использования, чтобы выяснить это, вы также должны проверить родителя, если доступ к свойству осуществляется через ViewChild.

Думаю, это все. Если я делаю функцию private, я получаю сообщение об ошибке. Также, когда я импортирую функции, которые не используются. Так что это «просто» публичные члены и т. д.

Peter Boomsma 10.04.2023 13:24

Трудно сказать без реальной ссылки на проект, но я предполагаю, что ваш .eslintrc.json должен быть таким (я добавляю только изменения)

"files": ["*.ts"],
      "parserOptions": {
        "project": ["tsconfig.json"],
        "createDefaultProgram": true
      },
      "plugins": ["@typescript-eslint"],

Очевидно, ESLint «плохо работает» с Angular:

import { Component, Input } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
})
export class AppComponent {
  public title = 'angular-movieseat';
  private something = 'asd';

  private somethingFn(): void {
    console.info('something');
    const something = 'something';
  }
}

Когда я объявляю const something, я получаю ожидаемую ошибку неиспользуемой переменной. То же самое с импортом Input в верхней части файла.

Я также получаю предупреждения для something и somethingFn(), когда объявляю их частными.

Другие вопросы по теме