const と readonly は、何が違いますか。
const は変数の再代入を禁じ、readonly はプロパティや配列の中身の書き換えを型で禁じます。const の配列でも push や sort はできるので、中身を守るには readonly を使います。
面接官が見ているのは補強。変数の再代入とプロパティの書き換えの区別ができるか。
これは「上位3件を返す関数 top3(users: User[]) の中で users.sort(...) を呼んでいたため、呼び出し側の一覧の並び順まで変わっていました。型でどう防ぎますか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- const は変数の再代入を禁じ、readonly はプロパティや配列の中身の書き換えを型で禁じる
その通りです。const の配列でも push はできます。 - どちらも同じで、書き方が違うだけ
違います。const は変数、readonly はプロパティに付きます。 - const は中身も含めて完全に不変にする
const の配列でも push や sort はできます。禁じるのは変数への再代入だけです。 - readonly は実行時に書き換えを止める
readonly は型チェックだけの仕組みで、実行時の挙動は変えません。
模範解答
const は変数に付き、その変数に別の値を代入し直すことを禁じます。中身の書き換えは止めないので、const の配列でも push や sort はできます。
readonly はプロパティや配列の型に付き、その中身を書き換えることを型チェックで禁じます。実行時には何もしません。
配列を渡した先で中身を変えられたくない、という目的には readonly が合います。
対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。