Xuxicheta
@Xuxicheta
инженер

Как правильно настроить ESLint для typescript?

Перевожу бек на ts.
Есть у меня вот обработчик маршрута для Koa
import { Context } from 'koa';
export class IndexController {
  static manifest({ response: res }: Context) {
    res.body = manifest;
  }
}

Конфигурация ESLint
{
  "parser": "typescript-eslint-parser",
  "extends": [
    "airbnb-base"
  ],
  "env": {
    "node": true,
    "es6": true
  },
  "plugins": [
    "import",
    "mongodb",
    "typescript"
	],
  "rules": {
    "func-names" : "error",
    "no-await-in-loop": "off",
    "strict": "off",
    "import/prefer-default-export": "off",
    "import/extensions": "off"
  },
  "settings": {
    "import/resolver": {
      "node": true,
      "eslint-import-resolver-typescript": true
    }
  }
}


Линтер ругается на import { Context } from 'koa'; Говорит unused ver.
Можно ли как-то удовлетворить линтер в данном случае, не прибегая к eslint-disable
  • Вопрос задан
  • 4722 просмотра
Пригласить эксперта
Ответы на вопрос 2
Ni55aN
@Ni55aN
Для TS есть TSLint
Ответ написан
Комментировать
IvanGanev
@IvanGanev
Веб разработчик
eslint теперь сфокусировался на работе и с typescript

Лично я пришел к такой настройки eslint под typescript:

.eslintrc.json
{
  "parser": "@typescript-eslint/parser",
  "plugins": ["@typescript-eslint", "prettier"],
  "extends": [
    "plugin:@typescript-eslint/recommended",
    "prettier/@typescript-eslint",
    "plugin:prettier/recommended"
  ],
  "parserOptions": {
    "sourceType": "module",
    "useJSXTextNode": true,
    "project": "./tsconfig.json"
  }
}


.prettierrc
{
  "singleQuote": true,
  "arrowParens": "always",
  "tabWidth": 2,
  "useTabs": false
}


.babelrc - важно, без него не заработает.

{
  "plugins": ["babel-plugin-rewire"],
  "presets": [
    "@babel/preset-typescript",
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}


tsconfig.json

{
  "compilerOptions": {
    "diagnostics": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "forceConsistentCasingInFileNames": true,
    "lib": ["es7"],
    "module": "commonjs",
    "target": "esnext",
    "moduleResolution": "node",
    "noImplicitAny": false,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "outDir": "dist/",
    "pretty": true,
    "removeComments": true,
    "strict": true,
    "declaration": true
  },
  "exclude": [
    "src/**/*.spec.*",
    "node_modules",
    "**/__tests__/*",
    "**/__mocks__/*"
  ],
  "include": ["src", "typings"]
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы