typescript 描述块作用域变量时出现TS错误,不能在其声明之前使用

qvtsj1bj  于 2022-11-26  发布在  TypeScript
关注(0)|答案(2)|浏览(222)

我有下面的代码写在 typescript

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

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

当我使用第二行时,我得到错误Block scoped variable pageCollection can not be used before its declaration
当我去掉第二行的括号

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

则会出现以下错误Cannot find name 'forEach'.
有人知道潜在的问题是什么吗?

li9yvcax

li9yvcax1#

问题是缺少一个非可选的;。您需要在第一条语句的末尾添加它,否则JavaScript(和TypeScript)会认为第二条语句是它的一部分:

const {
    data: { pageCollection },
} = await apolloClient.query<PageSlugsQuery>({ query: GET_PAGE_SLUGS }); // <===
[...(pageCollection?.items ?? [])].forEach((page) => {
    console.log("PAGEEE", page);
});

如果你打算编写依赖于分号自动插入的代码,那么确保你知道需要一个显式分号的规则是很重要的。一般来说,如果一行以([开头,你需要在前一行的末尾加上;(从技术上讲,这取决于前一行是什么,但总是这样做更安全)。
旁注:调用forEach时不需要跨页,只需:

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

我会使用for-of来代替,但这是一个风格问题:

for (const page of pageCollection?.items ?? []) {
    console.log("PAGEEE", page);
}
enyaitl3

enyaitl32#

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

const items = data?.pageCollection?.items ?? []

items.forEach((page) => {
      console.log('PAGEEE', page)
})

代码如下所示。这可能有用

相关问题