created: 2024-08-07T05:09:47.915Z

tsconfig.json の設定を見直した 2024 夏

このスライドの内容がとてもよかった。(ブッ刺さった)

古い設定を更新したのでそのときのメモ。

環境

  • typescript v5
  • webpack v5
    • webpack.config.js は自前で実装
    • Next や CRA とかではない
  • commonjs/require の記述があちこちに残っている状態
  • 実行環境はブラウザのみ(あとは jest/jsdom)

baseUrl

typescript の v4 から設定不要になっていたらしい。 最初にいれてそのままだったので削除しておく。

moduleResolution=bundler

  • node になっていた
    • package.json#exports は読めてると思っていた 💦
  • ESM 以降でハマらないで済むこともありそうなので、明示的に変更しておく

tsconfig#paths は消せる?

webpack.config.js#resolve をつかってくれるのなら、 tsconfig#paths は消していいのかなと思ったけど、そういうのはやってないようだった。

tsconfig-paths-webpack-plugin を入れてもいいけど、alias のつけ外しは滅多にないので必要性がない。

module

"preserve" にして tsc の実行後にも import がトランスパイル時にもそのままになるように。

import/require 周りの実装は webpack で解決している。 (設定項目の説明を読む限りでは)こちらのほうが tsc と webpack の役割分担がシンプルなはず。

なお、typescript v5.3 だと preserve は利用できなかった。v5.4 から。

In --module preserve (added in TypeScript 5.4),

target

だいぶまえに IE11 をサポートするために caniuse をみながら es5 にした覚えがある。が、いまになって「IE11 で使えないよ!」と怒る人もいない(怒られても対応する義理もない)ので ES2015 あげてしまうことにする。

esnext でも動くかもだけど、アロー関数と class 以降に文法的に大きい変化が思い当たらなかった。 とりあえず ES2015 でもいいかなと。

というか 2015 ってもうすぐ 10 年前な

lib

{es2023 => ESNext} にしておいてよいような気がしたので変更。

参考

勉強が一番、簡単でした 読んだら誰でも勉強したくなる奇跡の物語
[ad] 勉強が一番、簡単でした 読んだら誰でも勉強したくなる奇跡の物語
チャン・スンス, 吉川 南 (単行本(ソフトカバー))