TypeScript の配列の要素に対する型推論

昨日の記事の回答です。

配列の要素を参照している場合、その要素は動的に変更することができます。

以下の例の場合、arr[index]はその時点ではundefinedだったとしても、その後に代入されたりして値を変更可能ということです。

type T1 = (number | undefined)[]
const myFunc = (arr: T1, index: number) => {
    if (arr[index] === undefined) {
        return []; // never[]
    }
    const temp = arr[index]; //number | undefined 
    return temp;
}

つまり、以下のように、temp に代入する前に、arr[index] が他の値になる可能性があるということです。

type T1 = (number | undefined)[]
const myFunc = (arr: T1, index: number) => {
    if (arr[index] === undefined) {
        return []; // never[]
    }
    
    arr[index] = undefined // こういったことが可能なので、TypeScriptは arr[index]をnumberだとは推論しない

    const temp = arr[index]; //number | undefined 
    return temp;
}