如何在TypeScript的for-of循环中修复':' expected.ts(1005)?

mftmpeh8  于 2023-08-07  发布在  TypeScript
关注(0)|答案(2)|浏览(94)

我正在做的是阅读位于CardContainer组件中的React项目的public目录中的JSON文件,如下所示:

import { useAsync } from "react-async";

type ProjectData = {
    title: string,
    desc: string,
    website: string,
    repo: string,
    tags: Array<string>
}

type ProjectContainerData = {
    projects: Array<ProjectData>
}

async function getData() {
  let output: ProjectContainerData | undefined = undefined;
  await fetch("/myProjects.json")
    .then((response) => response.text())
    .then((data) => {
      output = JSON.parse(data);
    });
  return output;
}

function CardContainer() {
  const { data, error, isPending } = useAsync(getData);
    for (let project of data?["projects"]) {
      // error is here
    }
  return <></>;
}

export default CardContainer;

字符串
当我编辑代码时,我看到':' expected.ts(1005)错误。当我尝试用npm start编译它时,我看到了同样的事情:

ERROR in src/components/CardContainer.tsx:27:42
TS1005: ':' expected.
    25 | function CardContainer() {
    26 |   const { data, error, isPending } = useAsync(getData);
  > 27 |     for (let project of data?["projects"]) {
       |                                          ^
    28 |
    29 |     }
    30 |   return <></>;


我的TypeScript版本是4.9.5。有没有什么方法可以避免这种错误?

46scxncf

46scxncf1#

?[...]运算符不存在,其正确语法为?.[...]
因此是?.['projects']?.projects
参考文献:

  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining#syntax
suzh9iv8

suzh9iv82#

更新:当我更改以下内容时,错误消失:

const { data, error, isPending } = useAsync(getData);

字符串
对此:

const { data, error, isPending } = useAsync<ProjectContainerData | any>(getData);


当我改变这个:

for (let project of data?["projects"]) {


对此:

for (let project of data.projects) {

相关问题