为什么 ESLint 在检查数组值是否存在时抱怨“不必要的条件”?

问题描述 投票:0回答:1

const array = [1,2,3]

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

我正在使用 Typescript 和 ESLint,但我不明白为什么会出现此 ESLint 错误

array[5] === undefined
:

不必要的条件,类型没有重叠。ESLint(@typescript-eslint/no-unnecessary-condition)

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

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

typescript eslint
1个回答
1
投票

因为

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

在以下示例中,错误不存在

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

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

考虑设置

"strictNullChecks": true
以便能够与
null
undefined
一起操作,并设置
"noUncheckedIndexedAccess": true
以在索引签名属性访问中包含
… | undefined

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

请注意,

"noUncheckedIndexedAccess": true
让 TypeScript 有点偏执(每个
array[index]
都可能成为
undefined
),这可能不适合您的开发风格。

© www.soinside.com 2019 - 2024. All rights reserved.