ESLint, TypeScript, Vue и WebPack Encore: невозможно отключить правило ESLint

Я потратил несколько часов на изучение проблем Webpack Encore и ESLint, но не могу найти решения этой проблемы.

Я указываю, что хочу изменить или отключить некоторые правила TypeScript-ESLint, но ничего не происходит. Я все равно получаю предупреждения линтера. Моя конфигурация выглядит следующим образом:

.eslintrc.json

{
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/eslint-recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:@typescript-eslint/recommended-requiring-type-checking"
  ],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "project": "./tsconfig.json"
  },
  "plugins": [
    "@typescript-eslint"
  ],
  "rules": {
    "@typescript-eslint/no-non-null-assertion": "off"
  }
}

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "ES2015",
    "moduleResolution": "node",
    "sourceMap": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "allowSyntheticDefaultImports": true,
    "experimentalDecorators": true,
    "strict": true,
    "noImplicitAny": true,
    "esModuleInterop": true,
    "baseUrl": ".",
  },
  "include": [
    "assets/scripts/**/*"
  ],
  "exclude": [
    "node_modules"
  ]
}

И вот соответствующие части моей конфигурации выхода на бис:

Encore
  // ...
  .enableTypeScriptLoader()
  .enableForkedTypeScriptTypesChecking()
  .enableVueLoader()
  .enableEslintLoader((options) => {}, { lintVue: true })
  // ...
;

И это предупреждение, которое я получаю, хотя я отключил правило:

/some/path/my-file.ts
  97:82  warning  Forbidden non-null assertion  @typescript-eslint/no-non-null-assertion

Мне кажется, что этот PR должен исправить мою проблему, но это действительно так нет.

У вас есть какие-нибудь идеи? Буду очень признателен за любые подсказки :)

Изменить:

С помощью Lotype и моего коллеги я наконец нашел решение. Необходимо изменить пару вещей.

Сначала убедитесь, что используется правильный парсер:

.enableEslintLoader((options) => {
  options.parser = require('./.eslintrc.json').parser;
  // https://webpack.js.org/loaders/eslint-loader/#cache
  options.cache = false; // optional, but recommended
}, { lintVue: true })

Затем обязательно добавьте правила TypeScript в раздел переопределения и обычные правила в раздел правил, например:

{
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/eslint-recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:@typescript-eslint/recommended-requiring-type-checking"
  ],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "project": "./tsconfig.json"
  },
  "plugins": [
    "@typescript-eslint"
  ],
  "rules": {
    "no-console": "warn"
  },
  "overrides": [
    {
      "files": [
        "*.ts"
      ],
      "rules": {
        "@typescript-eslint/no-non-null-assertion": "off",
        "@typescript-eslint/no-explicit-any": "off"
      }
    }
  ]
}

Спасибо, что помогли мне с этим, ребята!


person CunningFatalist    schedule 21.07.2020    source источник


Ответы (1)


Не могли бы вы поместить его в раздел переопределений вашего .eslintrc.json?

  "overrides": [
    {
      "files": ["*.ts"],
      "rules": {
        "@typescript-eslint/no-non-null-assertion": "off"
      }
    }
  ]

Изменить: файлы, необходимые согласно спецификация

person lotype    schedule 21.07.2020
comment
К сожалению, это было не так. Однако спасибо за идею, попробовать стоило! - person CunningFatalist; 21.07.2020
comment
Ваш ответ был частью решения, так что большое вам спасибо! Я сделаю это принятым ответом. Любой, у кого такая же проблема: см. Редактирование моего вопроса! - person CunningFatalist; 21.07.2020
comment
Рад, что смог помочь! - person lotype; 21.07.2020