Skip to the content.

Lint

lint, or a linter, is a static code analysis tool used to flag programming errors, bugs, stylistic errors, and suspicious constructs.

In typescript world most popular is eslint.

tslint is deprecated and should not be used !

Rome is making some progress recently and could became popular tool in future

As usually available as NPM package

npm install eslint --save-dev
yarn add eslint -D

Generate local configuration: eslint --init. It will generate .eslintrc file.

Also configuration can be given in package.json

{
  "eslintConfig": {
    "env": {
      "node": true
    }
  }
}

Few most commonly used config sections:

eslint is intended to be used with javascript but with additional plugins it will adapt to typescript.

Plugin is typescript-eslint

Few configurations should be provided to be able to use typescript:

parser: '@typescript-eslint/parser',
plugins: [
  '@typescript-eslint',
],
extends: [
  'eslint:recommended',
  'plugin:@typescript-eslint/recommended',
],

check more setup instructions

After you could check js/ts code for configured issues:

yarn eslint . --ext .js,.ts

eslint could also apply fixes --fix for most issues where it is possible and rules have instructions how to do that fixes

eslint --ext=ts --fix .

Tweaking rules to disallow use of console.log:

{
  "rules": {
    // disable console.log
    "no-console": "on"
  }
}

For each rule there will be page explaining it rules/no-console

Prettier

https://prettier.io/

This is most of options which could be configured:

{
  "trailingComma": "es5",
  "tabWidth": 4,
  "semi": false,
  "singleQuote": true
}

Configuration file is picked up automatically when named with .prettierrc or some other alternatives.

Prettier supports formatting for multiple formats: JavaScript, JSX, TypeScript, CSS, Less, SCSS, HTML ,JSON, GraphQL, Markdown, YAML

Lint and Format in typescript project

eslint and prettier could both format codebase so they should be linked together to not override each other.

Together with typescript setup it brings some wiring complexity.

Some dependencies should be installed

yarn add -D @typescript-eslint/eslint-plugin
yarn add -D @typescript-eslint/parser
yarn add -D eslint
yarn add -D eslint-config-prettier
yarn add -D eslint-plugin-import
yarn add -D eslint-plugin-prettier
yarn add -D prettier

eslint config should have plugins and extends configured:

{
  extends: [
    'eslint:recommended',
    'plugin:@typescript-eslint/eslint-recommended',
    'plugin:@typescript-eslint/recommended',
    'prettier/@typescript-eslint',
    'plugin:prettier/recommended',
  ],
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: './tsconfig.json',
  },
  plugins: ['@typescript-eslint', 'prettier']
}

After this some scripts could be added into package.json to execute common commands:

{
  "lint": "eslint --ext=ts .", // check for lint issues
  "lint:fix": "yarn lint --fix", // fix lint issues
  "format": "prettier --list-different .", // check for formatting issues
  "format:fix": "prettier --write .", // fix formatting issues
  "fix": "yarn lint:fix && yarn format:fix" // fix everything possible to fix
}