DEV Community

Junichi Takahashi
Junichi Takahashi

Posted on • Updated on

How to set up TypeScript + ESLint

ESLint is important for a good developer experience.
This article describes how to set up TypeScript + ESLint.

Install ESLint

https://eslint.org/

npm install --save-dev eslint
Enter fullscreen mode Exit fullscreen mode

Install plugins for TypeScript

npm install --save-dev @typescript-eslint/parser
npm install --save-dev @typescript-eslint/eslint-plugin
Enter fullscreen mode Exit fullscreen mode

Install plugins for Prettier

https://prettier.io/

Prettier is pretty code formatter.
Sometimes, however, Prettier's code format conflicts with eslint rules.
eslint-config-prettier solves that problem.

npm install --save-dev prettier eslint-config-prettier
Enter fullscreen mode Exit fullscreen mode

Install plugins for import

npm install --save-dev eslint-plugin-import
Enter fullscreen mode Exit fullscreen mode

Settings

# .eslintrc.json

{
  "extends": [
    "plugin:@typescript-eslint/recommended",
    "prettier",
    "plugin:import/errors"
  ],
  "rules": {
    "react/jsx-props-no-spreading": "off",
    "import/prefer-default-export": "off",
    "import/extensions": [
      "error",
      "ignorePackages",
      {
        "js": "never",
        "jsx": "never",
        "ts": "never",
        "tsx": "never"
      }
    ],
    "import/order": [
      "error",
      {
        "groups": [
          "builtin",
          "external",
          "internal",
          ["parent", "sibling"],
          "object",
          "type",
          "index"
        ],
        "newlines-between": "always",
        "pathGroupsExcludedImportTypes": ["builtin"],
        "alphabetize": { "order": "asc", "caseInsensitive": true },
        "pathGroups": [
          {
            "pattern": "{react,react/**,react-dom/**,next,next/**}",
            "group": "external",
            "position": "before"
          },
          {
            "pattern": "@/**",
            "group": "internal",
            "position": "before"
          },
          {
            "pattern": "./**.module.css",
            "group": "index",
            "position": "after"
          }
        ]
      }
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

Add command into a package file

# package.json

"scripts": {
  "lint": "eslint **/*.ts"
},
Enter fullscreen mode Exit fullscreen mode

Run

npm run lint
Enter fullscreen mode Exit fullscreen mode

Visual Studio Code

# .vscode/settings.json

{
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "source.fixAll": true
  }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)