TL;DR

ESLint などの JavaScript のツールで TypeScript を扱えるようにするツール群。TypeScript 向けのリントルールを追加し、その多くは型の情報を使ってコードを解析する。

なぜ必要か

TypeScript は JavaScript に型の構文を追加した言語なので、JavaScript 向けのツールはそのままでは読めない。公式サイトによると、typescript-eslint は ESLint のようなツールが TypeScript の新しい構文を扱えるようにするために必要である。さらに、TypeScript の型 API を使うので、ESLint だけでは書けない強力なルールを提供できる。

仕組み

eslint、@eslint/js、typescript、typescript-eslint をインストールし、ESLint の flat config に設定を書く。

共有の設定として、次のようなものが用意されている。

  • recommended: 追加の設定なしで動く、正しさのための基本のルール。TypeScript と衝突する ESLint 本体のルールは無効にする
  • strict: recommended に、より主張の強いルールを加えたもの
  • stylistic: ロジックを変えずに、一貫したスタイルを強制するルール
  • recommended-type-checked など -type-checked の付いた設定: 型情報を必要とするルールを加えたもの。使うには languageOptions.parserOptions の設定が要る

例

// eslint.config.mjs
// @ts-check
import js from "@eslint/js"
import { defineConfig } from "eslint/config"
import tseslint from "typescript-eslint"
 
export default defineConfig({
  files: ["**/*.{js,ts}"],
  extends: [js.configs.recommended, tseslint.configs.recommended],
})

Effective TypeScript 第2版 ―型システムの力を最大限に引き出す83項目 では、any の拡散を検出する no-unsafe-assignment や、網羅していない switch 文を検出する switch-exhaustiveness-check など、多くのルールが紹介されている。

注意点

strict と strict-type-checked は、メジャーバージョンの間で安定していない。全ルールを有効にする all は、ほとんどのプロジェクトには勧められていない。

関連

出典