cat posts/typescript-%e3%81%ae%e5%9e%8b%e3%81%8c%e6%80%96%e3%81%8f%e3%81%aa%e3%81%8f%e3%81%aa%e3%81%a3%e3%81%9f%e6%97%a5.md

TypeScript の型が怖くなくなった日

最初は型エラーを消すためだけに any を書いていました。

TypeScript を使い始めた頃、型システムは「コンパイルを通すための障害物」でした。「JavaScript に型を書かせる謎の言語」くらいの認識で、エラーが出るたびに // @ts-ignoreas any で黙らせていました。

転換点

転換点は API レスポンスをそのまま使いまわしていたコードをリファクタした時です。型をちゃんと定義してみたら、コンパイラが「そのプロパティは undefined かもしれない」と言ってきました。実際に本番でたまに落ちていた箇所でした。

// 以前
const name = user.profile.name; // undefined で落ちることがあった

// 型をつけてから
type User = {
  profile: {
    name: string | null;
  } | null;
};
const name = user.profile?.name ?? '名無し'; // コンパイラに気づかされた

変わったこと

型を「制約」ではなく「ドキュメント」として書くようになりました。関数の引数と戻り値を先に型で書くと、実装の迷いが減ります。

今は as any を書くたびに「後で絶対ここで泣く」と思うようになりました。型への向き合い方が変わっただけで、バグの発見が前工程に移動した感覚があります。