You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript解构报错:块级变量未声明前不可使用及forEach查找失败问题

问题原因分析

第一个报错(带外层括号时)

这是自动分号插入(ASI)导致的语法解析错误。你前面的解构赋值语句末尾没有加半角分号,JavaScript引擎会把后面的括号(...)解析成函数调用,试图把前面的pageCollection当作函数来执行——但此时pageCollection还处于解构赋值的声明阶段,还没完成初始化,所以触发了“变量未声明就使用”的错误。

错误代码场景:

const {
  data: { pageCollection }
} = await apolloClient.query<PageSlugsQuery>({ query: GET_PAGE_SLUGS })

// 无分号,括号被解析为函数调用
( [...(pageCollection?.items ?? [])].forEach((page) => {
  console.log('PAGEEE', page)
}))

第二个报错(移除外层括号后)

依旧是ASI的问题。前面的解构赋值语句没加分号,后面的数组字面量[...(pageCollection?.items ?? [])]会被引擎误认为是前面await apolloClient.query(...)表达式的一部分(比如被当成函数参数或成员访问),导致TypeScript无法识别这是一个数组实例,自然找不到数组的forEach方法,所以报错“找不到forEach”。

错误代码场景:

const {
  data: { pageCollection }
} = await apolloClient.query<PageSlugsQuery>({ query: GET_PAGE_SLUGS })

// 无分号,数组字面量被合并到前面的表达式中
[...(pageCollection?.items ?? [])].forEach((page) => {
  console.log('PAGEEE', page)
})

解决办法

在解构赋值语句的末尾加上半角分号,切断前后表达式的关联即可:

const {
  data: { pageCollection }
} = await apolloClient.query<PageSlugsQuery>({ query: GET_PAGE_SLUGS }); // 添加分号

[...(pageCollection?.items ?? [])].forEach((page) => {
  console.log('PAGEEE', page)
})

内容的提问来源于stack exchange,提问作者Loki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:05:21