LoginSignup
3
4

More than 3 years have passed since last update.

TypeScriptで配列のインデックスアクセス時の型推論にundefinedを含める

Posted at

環境

  • TypeScript 4.2.3

該当のコードはTypeScript Playgroundにあります。

TypeScriptでは、配列のインデックスアクセス時の型推論にundefinedが含まれない

下記のコードはnumber型の変数にundefinedを代入していますが、TypeScriptのデフォルトの設定だとコンパイルエラーになりません。

const undefinedable = [1,2,3][4];
const numberOnly: number = undefinedable;

console.log(numberOnly); //=> undefined

これはconst undefinedable = [1,2,3][4]number | undefinedではなくnumberのみで型推論されるためです。

tsconfigでstrict: truestrictNullChecks: trueの設定を使っても変わりません。ですがTypeScript4.1で追加されたnoUncheckedIndexedAccessというオプションを使うと、const undefinedable = [1,2,3][4]number | undefinedに型推論されるためコンパイルエラーにすることができます。

image.png

コンパイルエラーを修正する方法

この値を代入するには、undefinedablenumberであることを確認するか、undefinedでない事を確認する必要があります。

if (typeof undefinedable === 'number') {
    const numberOnly: number = undefinedable;
}
if (undefinedable) {
    const numberOnly: number = undefinedable;
}

あるいは、値の存在が自明なときはnon-nullアサーション演算子(!)を使う事もできます。

const numberOnly: number = undefinedable!;

このコンパイルエラーは毎回チェックの手間がかかる割に多くの場合では有効に機能しないと言われているらしく、デフォルトでオンになったりstrict: trueに含まれたりはしていないようです。

参考

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4