typescript 使用Element访问嵌套数组的属性时出错,因为类型的表达式隐式具有“any”类型

ioekq8ef  于 2022-12-27  发布在  TypeScript
关注(0)|答案(2)|浏览(296)

我在学打字机。
在尝试解决以下错误时,我遇到了类型问题:
元素隐式具有"any"类型,因为类型"0"的表达式不能用于索引类型"number|(人数|number [])[]"。类型" number "上不存在属性" 0|(人数|编号[])[]'。
下面是我的代码

let arr = [2, [22, [222]], 2222];

console.log(arr[1][0]); // 22

我四处搜索,找到了对象的例子,但我不知道如何使用嵌套数组。
如何解决这个问题?
谢谢。

e5nszbig

e5nszbig1#

这个错误很有意义,因为类型系统并不确定你访问的索引arr[1]是一个数组,同样,arr[1]也可能是一个数字。
这正是typesript给你的好处,在普通的javascript中你可以写arr[0][1],而且不会有编译错误,但是,你会在运行时得到一个讨厌的错误,因为arr[0]根本不是一个数组。
只有在确保arr[1]实际上是一个数组之后,您才能将arr[1]用作数组类型。

if (Array.isArray(arr[1])) {
  console.log(arr[1][0]); // 22 - No typescript error
}
qacovj5a

qacovj5a2#

这似乎对我有用。
出错前:

const slug = props.data[0].attributes.slug;

添加检查项“Array.isArray”后:

const slug = Array.isArray(props.data) ? props.data[0].attributes.slug : null;

相关问题