IT-Q

配列 const list: string[] = [] で、list[0] の型は何になりますか(既定の設定で)。

既定では string です。配列の長さは型に表れないので、空の配列でも string として扱われ、実行時は undefined になりえます。noUncheckedIndexedAccess で塞げますが strict には含まれません。

面接官が見ているのはインデックスアクセスの穴と noUncheckedIndexedAccess を知っているか。

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

  • string。空の配列でも string として扱われ、実行時には undefined になりうる
    その通りです。既定ではこの穴があり、noUncheckedIndexedAccess で塞げます。
  • string | undefined
    noUncheckedIndexedAccess を有効にしたときはそうなります。既定では string です。
  • never
    中身が空でも、型は string[] なので要素の型は string です。
  • コンパイルエラーになる
    エラーにはなりません。そこがこの問題の落とし穴です。

模範解答

string になります。配列の長さは型に表れないので、空の配列の [0] でも、TypeScript は string として扱います。実際に読むと undefined が返り、その後の処理で落ちることがあります。

noUncheckedIndexedAccess を有効にすると、インデックスで読んだ値の型に undefined が足され、確かめてから使うよう強制されます。この設定は strict には含まれていないので、別に有効にする必要があります。

配列の先頭が欲しいだけなら、長さを確かめるか、絞り込める書き方にしておくと安全です。

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