reactjs - typescript :API 获取类型错误: "Object is possibly ' null'。”

标签 reactjs typescript

我正在将我的 React 应用程序重构为 Typescript,到目前为止一切顺利。我正在使用我的最后一个组件,即获取 API 数据的组件,我试图理解为什么这些类型错误没有得到解决。我用了https://jvilk.com/MakeTypes/帮助正确构建接口(interface)。

Object is possibly 'null' 两次 error & stories(下面的注释行)
参数 '___' 隐式具有 'any' 类型。 storyidx 两次(下面的注释行)

我在使用此 API 调用组件时遇到问题。我错过了什么?

import React, { FC, ReactElement, useEffect, useState } from "react";
import Story from "./Story";

export interface NewsProps {
  results?: (ResultsEntity)[] | null;
}
export interface ResultsEntity {
  section: string;
  title: string;
  abstract: string;
  url: string;
  multimedia?: (MultimediaEntity)[] | null;
}
export interface MultimediaEntity {
  url: string;
  caption: string;
}

const News: FC<NewsProps> = ({results:ResultsEntity}):ReactElement => {
  const [error, setError] = useState(null);
  const [stories, setStory] = useState(null);

  useEffect(() => {
    const getCurrentPage = () => {
      const url = new URL(window.location.href);
      const page = url.pathname.split("/").pop();
      return page ? page : "home";
    };
    const section = getCurrentPage();
    fetch(
      `https://api.nytimes.com/svc/topstories/v2/${section}.json?api-key=4fzCTy6buRI5xtOkZzqo4FfEkzUVAJdr`
    )
      .then((res) => res.json())
      .then((data) => {
        setTimeout(() => setStory(data), 1500);
      })
      .catch((error) => {
        console.log("Error", error);
        setError(error);
      });
  }, []);

  if (error) {
    return <div>Error: {error.message}</div>;   /// "Object is possibly 'null'" (for error)
  } else 
  if (!stories) {
    return <div>Loading...</div>
  } else {
    return (
      <>
        <ul className="stories">
          {stories.results.map((story, idx) => { // "Object is possibly 'null'" (for stories)
                                                 // Parameter '__' implicitly has an 'any' type (for idx & story)
            return (
              <Story
                key={idx}
                title={story.title}
                abstract={story.abstract}
                img={
                  story &&
                  story.multimedia &&
                  story.multimedia[0] &&
                  story.multimedia[0].url
                    ? story.multimedia[0].url
                    : null
                }
                alt={
                  story &&
                  story.multimedia &&
                  story.multimedia[0] &&
                  story.multimedia[0].caption
                    ? story.multimedia[0].caption
                    : null
                }
                link={story.url}
              />
            );
          })}
        </ul>
      </>
    );
  }
}
export default News;

最佳答案

Typescript 不理解 null 的类型

const [error, setError] = useState<string>(null);

关于reactjs - typescript :API 获取类型错误: "Object is possibly ' null'。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66396001/

相关文章:

android - React-native 构建错误 : Execution failed for task ':react-native-maps:prepareComAndroidSupportAppcompatV72301Library' . > Could not expand ZIP

javascript - Mobx 不观察可观察数组中的类

typescript - 运行 "tsc"是检查 "node_modules"中的一个文件

angular - Angular 6 中的 HTTP 错误处理

Angular CLI : "Unexpected token import" while test execution using karma

javascript - 如何在嵌套的 javascript 对象上使用扩展运算符?

javascript - 无法读取未定义的属性 'thisCompilation' - react-scripts-ts

javascript - Reactjs:在 <tr> 标签内显示数组数据

angular - Angular 2 应用程序的 TFS 构建失败(TypeScript 错误),但在本地构建一切正常

angularjs - Visual Studio Code 中的 Angular 2/TypeScript 多行字符串