2019年2月18日月曜日

@typescript-eslintでtypescriptのlintをeslintで行いつつ、airbnbの設定でいきましょう的なお話

  • このエントリーをはてなブックマークに追加

typescriptを最近使い始めたわけで。
lintをするにはtslintが一般的だったんだけど、なんかeslintでもできるようになるよみたいなニュースもあったし、VSCodeのtslintのプラグインにdeprecatedっていう名前がつき始めるし。
ってことでtslintじゃなくてeslintでlintしちゃおうかな〜っていう。
で、さらにいつもeslintではairbnbでやってたから今回もairbnbでlintしたいなぁと。

ということで今日は@typescript-eslintを使ってeslintのairbnbをtypescriptにも適用しちゃおう的なお話をば。
ちなみについでにhooksのlintも入れてみましょう的な。

とりあえず入れておくべきnpmはこちら。

$ npm install --save-dev \
@typescript-eslint/eslint-plugin \
babel-eslint \
eslint \
eslint-config-airbnb \
eslint-plugin-import \
eslint-plugin-jsx-a11y \
eslint-plugin-react \
eslint-plugin-react-hooks \

で、そしたら.eslintrc.jsを作成しましょう的な。

module.exports = {
  "parser": "@typescript-eslint/parser",
  "env": {
    "es6": true,
    "browser": true
  },
  "extends": [
    "airbnb"
  ],
  "globals": {
    "__DEV__": true
  },
  "plugins": [
    "@typescript-eslint",
    "react-hooks"
  ],
  "parserOptions": {
    "sourceType": "module",
    "project": "./tsconfig.json"
  },
  "settings": {
    "import/extensions": [
      ".js",
      ".jsx",
      ".ts",
      ".tsx"
    ],
    "import/core-modules": [
      "app"
    ],
    "import/resolver": {
      "node": {
        "extensions": [
          ".js",
          ".jsx",
          ".ts",
          ".tsx"
        ]
      }
    }
  },
  "rules": {
    "react/prop-types": [
      0
    ],
    "react-hooks/rules-of-hooks": "error",
    "react/jsx-filename-extension": [
      "error",
      {
        "extensions": [
          ".js",
          ".jsx",
          ".ts",
          ".tsx"
        ]
      }
    ],
    "import/extensions": [
      "error", "always",
      {
        "js": "never",
        "jsx": "never",
        "ts": "never",
        "tsx": "never"
      }
    ]
  }
}

parserを@typescript-eslint/parserにしてあげ、pluginsに@typescript-eslintをいれ、ついでにreact-hooksもいれる。
で、parserOptionsのprojectをtsconfig.jsonにしてあげる。
これでいけるっちゃいけるんだけど、若干エラーが出てきてしまうところがあるので下記を直しましょう的な。

・prop-types
これは正直いらないのでなくしましょう的な。

・import/no-unresolved
settingsにimport/extensionsとしてtsも入れたり、import/resolverにもtsとか入れたり、rulesでimport/extensions設定してあげたり、jsx-filename-extension設定したり。
細かく検証していないからsettingsだけでよかったりするかもだけど。

ってな感じでやってあげれば一応大丈夫だった気がする。
とりあえずこれで安心してようやくtypescriptで進められそうな的なみたいな。

ちなみに先日こちらの記事(@typescript-eslint ことはじめ)がバズってたのでこちらを参考にしてもよいかと。

あとVSCodeを使っているならば.vscode/settings.jsonも下記にしておきましょう的な。

{
  "eslint.nodePath": "./node_modules/eslint",
  "eslint.run": "onSave",
  "eslint.autoFixOnSave": true,
  "eslint.alwaysShowStatus": true,
  "eslint.enable": true,
  "eslint.validate": [
    "javascript",
    "javascriptreact",
    {
      "language": "typescript",
      "autoFix": true
    },
    {
      "language": "typescriptreact",
      "autoFix": true
    }
  ]
}

0 件のコメント:

コメントを投稿

Adsense