最初は型エラーを消すためだけに any を書いていました。
TypeScript を使い始めた頃、型システムは「コンパイルを通すための障害物」でした。「JavaScript に型を書かせる謎の言語」くらいの認識で、エラーが出るたびに // @ts-ignore や as any で黙らせていました。
転換点
転換点は API レスポンスをそのまま使いまわしていたコードをリファクタした時です。型をちゃんと定義してみたら、コンパイラが「そのプロパティは undefined かもしれない」と言ってきました。実際に本番でたまに落ちていた箇所でした。
// 以前
const name = user.profile.name; // undefined で落ちることがあった
// 型をつけてから
type User = {
profile: {
name: string | null;
} | null;
};
const name = user.profile?.name ?? '名無し'; // コンパイラに気づかされた
変わったこと
型を「制約」ではなく「ドキュメント」として書くようになりました。関数の引数と戻り値を先に型で書くと、実装の迷いが減ります。
今は as any を書くたびに「後で絶対ここで泣く」と思うようになりました。型への向き合い方が変わっただけで、バグの発見が前工程に移動した感覚があります。