JavaScript で配列にアクセスする際、配列の長さを超えるインデックスを指定すると undefined
が返されることがあります。しかし、TypeScript の型定義上では、配列の長さを超えるインデックスを指定しても undefined
型が返されることはありません。これはランタイムエラーを引き起こす恐れがあります。
noUncheckedIndexedAccess
オプションを有効にしている場合、配列のインデックスで返される型は常に undefined
とのユニオン型になり、undefined
チェックが必ず必要になるのでより安全です。しかし、大規模なコードベースで新たにこのオプションを有効にすると、多くの箇所でコンパイルエラーが発生するため、一度に全ての箇所を修正するのは困難です。
arr.at()
メソッドを使うと noUncheckedIndexedAccess
オプションの有効無効にかかわらず、配列のインデックスで返される型は常に T | undefined
になります。
const arr = [1, 2, 3];
arr.at(0); // 1
// ?^ number | undefined
arr.at(-1); // 3
// ?^ number | undefined
TypeScript で配列の要素にインデックスを指定してアクセスする場合には、arr[0]
ではなく arr.at(0)
を使うことで、より安全にコードを書くことができます。