Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何要求接口成员提供响应数据?_Reactjs_Typescript - Fatal编程技术网

Reactjs 如何要求接口成员提供响应数据?

Reactjs 如何要求接口成员提供响应数据?,reactjs,typescript,Reactjs,Typescript,在下面的代码中,它编译得很好,我希望任何不符合接口历史的响应数据都会抛出错误。但是,情况并非如此,所有数据都处于正常状态。但是在任何响应对象上肯定没有thisPropertyDoesNotExist属性。为什么这里不需要接口?该标准将如何实施 最终的目标是让响应数据至少具有在接口中定义的数据,我非常感兴趣的是检查url是否不存在 import React, { useState, useEffect } from "react"; import { getStory } from "../ser

在下面的代码中,它编译得很好,我希望任何不符合接口历史的响应数据都会抛出错误。但是,情况并非如此,所有数据都处于正常状态。但是在任何响应对象上肯定没有thisPropertyDoesNotExist属性。为什么这里不需要接口?该标准将如何实施

最终的目标是让响应数据至少具有在接口中定义的数据,我非常感兴趣的是检查url是否不存在

import React, { useState, useEffect } from "react";
import { getStory } from "../services/hnAPI";

interface Props {
  storyId: number;
}

interface IStory {
  id: number;
  title: string;
  url: string;
  thisPropertyDoesNotExist: string;
}

export const Story: React.FC<Props> = (props) => {
  const [story, setStory] = useState<IStory | null>(null);
  useEffect(() => {
    getStory(props.storyId)
      .then((data: Required<IStory>) => {
        data && setStory(data);
      })
      .catch((error) => {
        console.log(error);
        setStory(null);
      });
  }, [props.storyId]);
  return story ? (
    <p>
      <a href={story.url}>{story.title}</a>
    </p>
  ) : null;
};

最终的目标是让响应数据至少具有在接口中定义的数据,我非常感兴趣的是检查url是否不存在

import React, { useState, useEffect } from "react";
import { getStory } from "../services/hnAPI";

interface Props {
  storyId: number;
}

interface IStory {
  id: number;
  title: string;
  url: string;
  thisPropertyDoesNotExist: string;
}

export const Story: React.FC<Props> = (props) => {
  const [story, setStory] = useState<IStory | null>(null);
  useEffect(() => {
    getStory(props.storyId)
      .then((data: Required<IStory>) => {
        data && setStory(data);
      })
      .catch((error) => {
        console.log(error);
        setStory(null);
      });
  }, [props.storyId]);
  return story ? (
    <p>
      <a href={story.url}>{story.title}</a>
    </p>
  ) : null;
};

json对象的接口只是您在运行时未验证的承诺,即数据将与您所说的匹配。TypeScript在运行时不存在,它只是JavaScript,您不能在运行时使用接口

解决方案 但是,您可以编写JavaScript验证代码 *将类型返回到TypeScript *确保对象与类型匹配


这种库的一个例子是:

当接口被传输到javascript时,它在运行时不存在。您只有普通对象。我所知道的最好的解决方案是使用obj.hasownPropertyIsPropertyDoesnotexist检查某个属性是否存在。我想没有别的办法了。啊,真有趣!谢谢你的图书馆提示!