TypeScript をインストールせずに型チェックしたい

以前「TS の型定義だりー」的な記事を書いて軽く燃えたこともあったが、やはり自分が作る程度の小さなアプリでは、依存関係をできるだけ減らしておきたいと思っている。

みたいな感じで、闇雲に「モダン・フロントエンド」なプロジェクトを作ろうとするとすぐに依存パッケージが増えてしまい、定期的なメンテナンスのコストが膨大になる。

仕事でやらされてるならまだいいんだ。面倒臭いだけで本質的な成果がないマイグレーション作業で給料がもらえるんだから、意味ねーくだらねーと思いながらでも別にやる。でも、自分一人で作って使いたいようなモノでそういうメンテナンスコストを増やしたくないのだ。

だから自分はなるべく、トランスパイルが必要ない素の Node.js や JavaScript、CSS を書いて、ビルドなしに書いたコードがそのまま動くような小さなアプリを作りたいと考えている。


しかし、JS のコードを書いている時、この引数が string 型なのか number 型なのか、ぐらいは示しておきたいなーと思うことはあったりする。

実は、JSDoc というドキュメンテーションコメントを書くことで、関数の戻り値の型や引数の型を示したりできる。

TypeScript のように言語構文として型定義するワケではなく、コメントとして書くので、プロジェクトに typescript パッケージをインストールする必要はないし、トランスパイルも不要だ。

コードを書く時は VSCode で作業するので、VSCode 上でこの JSDoc を読み取り、型チェックをしてくれれば十分なのでは? と思い、設定手順を確認してみた。

色々こしらえてみたサンプルプロジェクトは以下。

VSCode には拡張機能の「ESLint」dbaeumer.vscode-eslint をインストールしておく。あとは VSCode の標準機能との合わせ技で、JS ファイルの型チェック、JSDoc の読み取りができるようになる。

プロジェクトに npm パッケージとしてインストールしているのは、eslinteslint-plugin-jsdoc という JSDoc 部分をチェックするためのプラグインのみ。ホントは eslint も依存関係に持ちたくないぐらいサボりたいのだが、現状諦めている…。使用するルールを .eslintrc.js で定義しておく。

んで、VSCode エディタ上で型チェックを行わせるには、jsconfig.json というファイルを作ってやる。tsconfig.json (TS) ではなく、JS である。

{
  "compilerOptions": {
    "checkJs": true
  }
}

jsconfig.json では checkJs というオプションだけ有効にすれば良い。

もしくは、.js ファイルの1行目に // @ts-check というコメントを書くことでも型チェックを有効にできる。

コレで、.js ファイルを VSCode で開いた時に、型不正があればエラーが出たり、JSDoc が正しく書けていないとワーニングが出たりするようになる。プロジェクトには typescript パッケージをインストールしてもいなければ、.ts ファイルでもない。index.js にはわざとエラーになるコードを書いてあるので、git clone して VSCode でプロジェクトを開いてみると、型エラーなどが確認できことだろう。

ESLint 関連のワーニングが上手く表示されない場合は、VSCode のユーザ設定 (settings.json) で eslint.enableeslint.quiet を設定しているのかもしれない。自分の環境で試した限り、プロジェクトローカルに置いた .vscode/settings.json では上手くユーザ設定を上書き設定できなかったので、ユーザ設定に注意。ココら辺 VSCode の仕組みがよく分かっていない。


とりあえずこんな感じで、素の JS を書きながら、JSDoc で型を示し、型不正な代入などがあれば VSCode 上でワーニングを表示させる、といったことが可能になった。よきよき。