IT-Q

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
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。