我现在有一个有“洞”的稀疏数组。考虑一下:
let arr: number[] = []
arr[2] = 5
// arr = [,,5]
我使用第二个数组查找数组中的索引,如下所示:
let indices: number[] = [1, 2]
console.log(
indices.map(i => arr[i])
.includes(undefined)
)
// Expected output: true
但是,我得到这个错误:第一个月
我认为这是因为Typescript认为arr
只能包含数字,而实际上数组中的“洞”的值为undefined
。
我可以使用联合类型number | undefined
来解决这个问题,但是有更好的方法吗?
我是从Javascript来的,对Typescribe还比较陌生。
3条答案
按热度按时间flseospp1#
TypeScript不知道如何处理稀疏数组,因为它不承认它们的存在。
不过,从我的发现来看,处理这个问题的方法似乎只是按照您的建议来做-将数组键入为
(number | undefined)[]
。如果你有很多这样的稀疏数组,你可能需要一个
SparseArray<T>
类型的helper(尽管在大多数情况下它可能没有用):bqf10yzr2#
您可以使用
some
代替includes
kmb7vmvb3#
或者,如果希望所有
Array
类型都包含undefined
值,则只需启用noUncheckedIndexedAccess
编译器选项(示例)。**警告:**由于这会要求集合值周围的类型保护或Assert,从而使类型检查更加严格,因此您可能会收到其他TypeScript错误。