typescript - 将 json 转换为接口

Posted

技术标签:

【中文标题】typescript - 将 json 转换为接口【英文标题】:typescript - cast json to an interface 【发布时间】:2018-10-27 16:51:45 【问题描述】:

我有一个这样的界面:

export default interface IProject extends
    Id?:number;
    name?:string;
    description?:string;

当我从服务器获取数据时,json 文件包含更多这样的属性:


    id,
    name,
    description,
    url,
    startDate,
    finishDate

但我只需要 id、name 和 description 字段。我试过这个:

response.data.map((p: any) => p as IProject);

但对象包含不必要的数据,如 url、startdate 和 finishDate 我怎样才能正确映射它们? 我知道我们可以像这样映射它们:

response.data.map((p: any) => 
    return id:p.id,name:p.name,description:p.description
);

但是还有其他更好的方法吗?

【问题讨论】:

Auto-skip properties not belonging to the type in TypeScript的可能重复 【参考方案1】:

我建议你做你正在做的事情,但另外为你的服务器响应添加一些类型。这样你就可以为你的映射函数获得一些智能感知。

interface IProject 
  id?: number;
  name?: string;
  description?: string;


interface IProjectResponse 
  id?: number;
  name?: string;
  description?: string;
  url?: string;
  startDate?: string;
  finishDate?: string;


const mapResponse = (response: IProjectResponse[]) => response.data.map((p) => (
  id: p.id,
  name:p.name,
  description: p.description,
));

const response = await fetch(/* .. */);
const data = await response.json();

const projects: IProject[] = mapResponse(data);

【讨论】:

以上是关于typescript - 将 json 转换为接口的主要内容,如果未能解决你的问题,请参考以下文章

Typescript / Angular2:将 JSON 转换为与 Observable 和 JSONP 接口

在 Angular 11 中进行单元测试时,将 json 对象转换为 typescript 接口导致模拟对象出错

打字稿:将 JSON 对象转换为类/接口对象

Angular2 将 json 结果转换为接口

将 JSON 对象转换/翻译为打字稿类型/接口的工具?

将 TypeScript 对象转换为 JSON