为什么 ESLint 在检查数组值是否存在时抱怨 "Unnecessary conditional"?

Why is ESLint complaining about "Unnecessary conditional" when checking if an array value exists?

const array = [1,2,3]

if (array[5] === undefined)
  array[5] = 5

我正在使用 Typescript 和 ESLint,但我不明白为什么 array[5] === undefined:

显示此 ESLint 错误

Unnecessary conditional, the types have no overlap.ESLint(@typescript-eslint/no-unnecessary-condition)

因为这是一个数字数组,所以 ESLint 告诉我检查是不必要的条件。但我想知道给定的索引是否有值。我应该在这里做什么而不是显示错误?

这是一个显示错误的沙盒:Sandbox

因为array[5]的类型是number,而不是number | undefined

在下面的例子中,错误is not present:

const array = [1,2,3]
const item = array[5] as number | undefined

if (item === undefined)
  array[5] = 5

考虑设置 "strictNullChecks": true 以能够使用 nulls 和 undefineds 进行操作,并设置 "noUncheckedIndexedAccess": true 以在索引签名中包含 … | undefined 属性 访问:

{
  "compilerOptions": {
    "strictNullChecks": true,
    "noUncheckedIndexedAccess": true
  }
}