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