IT-Q

const colors = ["red", "green"] as const の as const は、何をしていますか。

型をリテラル型のまま固定し、配列やオブジェクトを readonly にします。string[] ではなく readonly ["red", "green"] になります。実行時に凍結するわけではありません。

面接官が見ているのはリテラル型と readonly への固定を理解しているか。

よくある答えと、面談でどう見られるか

  • 値を変更できない readonly にし、型を string[] ではなく "red" と "green" のリテラル型に固定する
    その通りです。型は readonly ["red", "green"] になります。
  • 配列を実行時に凍結する(Object.freeze と同じ)
    実行時には何もしません。型の上で書き換えを禁止するだけです。
  • const で宣言しているので、as const は意味が無い
    const は変数の再代入を止めるだけで、配列の中身の変更は止めません。型も string[] のままです。
  • 型を any にする
    逆です。もっとも狭い型に固定します。

模範解答

2つのことをします。1つ目は、型を広げずにリテラル型のまま固定することです。as const が無いと colors の型は string[] ですが、付けると readonly ["red", "green"] になります。2つ目は、配列やオブジェクトを readonly にして、書き換えを型の上で禁止することです。

ここから typeof colors[number] と書けば、"red" | "green" というユニオン型を作れます。値の一覧と型を1か所で管理できるので、enum の代わりによく使われます。

注意点は、どちらも型の上だけの話であることです。実行時に配列が凍結されるわけではありません。

対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。