当前位置: 首页 > 知识库问答 >
问题:

前端 - 如何将fetch得到的结果`res:Proj`转为`DataType`类型?

解晟睿
2024-06-06

我们在使用Form的时候,一般Form的dataSource有自己的DataType:
例如定义的:

interface DataType {  key: React.Key;  id: number;  name: string;  desc: string;  loc: string;  selected: boolean;  createTime: Date;  updateTime: Date;}

但是我fetch请求的数据有自己的类型。比如:

  export interface Proj {    key: string;    id: number;    name: string;    desc: string;    loc: string;  // 存放位置    createTime?: Date,    updateTime?: Date  }

请求数据:

fetch.invoke('getProj').then((res:Proj) => {  console.log('getProj:' ,res)}

这里遇到2个问题:
1)如何将得到的结果res:Proj转为DataType类型?
2)对比DataTypeProjDataType多出key字段,如何按照顺序进行增加到res呢?

共有2个答案

蒋无尘
2024-06-06

新增一个转换函数,对于key字段,如果Proj类型中没有这个字段,可以在转换函数中生成这个字段:

function convertProjToDataType(proj: Proj): DataType {  return {    key: proj.key || proj.id.toString(),  // 使用 Proj 的 key,如果不存在则使用 id 转换为字符串    id: proj.id,    name: proj.name,    desc: proj.desc,    loc: proj.loc,    selected: false,  // 默认值,或者根据业务逻辑调整    createTime: proj.createTime || new Date(),  // 如果没有提供,使用当前时间    updateTime: proj.updateTime || new Date()   // 如果没有提供,使用当前时间  };}

示例示例:

fetch.invoke('getProj').then((res: Proj) => {  const dataTypeObj = convertProjToDataType(res);  console.log('Converted DataType Object:', dataTypeObj);});
满伟彦
2024-06-06

问题1:如何将得到的结果res:Proj转为DataType类型?

由于ProjDataType接口的结构大部分相似,你可以通过类型断言或者使用TypeScript的映射类型来将Proj转换为DataType。类型断言是最简单的方式,但请确保你的数据确实符合DataType的结构。

fetch.invoke('getProj').then((res: Proj) => {  // 使用类型断言将Proj转换为DataType  const dataTypeResult: DataType = res as DataType;  console.log('getProj as DataType:', dataTypeResult);}

问题2:对比DataTypeProjDataType多出selected字段,如何按照顺序进行增加到res呢?

DataType接口中多出的selected字段并不是一个简单的类型转换问题,而是涉及到如何根据业务逻辑为数据添加新属性。如果你希望给res对象添加selected字段,你可以直接扩展该对象,并为selected字段提供一个默认值。

fetch.invoke('getProj').then((res: Proj) => {  // 扩展res对象,并添加selected字段,默认值为false  const dataTypeResult: DataType = {    ...res,    selected: false, // 假设默认值为false,根据具体需求设定  };  console.log('getProj with added selected field:', dataTypeResult);}

注意,上面的代码假设key字段在ProjDataType中的类型是兼容的。在提供的示例中,keyProj中是string类型,在DataType中是React.Key类型,而React.Key可以是stringnumber。如果Proj中的key字段总是字符串,并且这符合你的DataTypekey字段的使用场景,那么类型断言或扩展对象的方式就是可行的。

如果DataTypekey的类型严格要求与Projkey的类型不一致,那么你可能需要创建一个转换函数来确保类型安全,或者调整接口定义以匹配实际的数据结构。

 类似资料:
  • 我看了几十个答案,但他们做的大多数是建议或类似的技巧。在我的例子中,我要转换的类型是。下面是这个POJO: 由于重构,现在是一个数组。 (显然这是一种简化,对象多了很多字段)。我只想获得一个数组,以便将其传递给。以下是我想要的: 但是根据IDE返回。生成器不工作,但无论如何这不是一个好主意,我们不想重新分配或扰乱那些未来。只需返回它们的数组。传递不会编译。 不要把这个问题标记为重复问题,除非你绝对

  • null field name=“path_exact”type=“string”indexed=“true”stored=“true”termvectors=“true”/> field name=“title”type=“text_general”indexed=“true”stored=“true”multivalued=“true”termvectors=“true”/> 提到的唯一键 使

  • 问题内容: 我有一个mysqli查询,我需要将其格式化为移动应用程序的JSON。 我已经设法为查询结果生成一个XML文档,但是我正在寻找更轻量的东西。(有关我当前的XML代码,请参见下文) 问题答案: 这样的输出: 如果您想要其他样式,可以尝试以下方法: 输出将是这样的:

  • 问题内容: 由于使用JDBC连接器进行MySQL查询,因此我有一个结果集。所以我的工作是将结果集转换为JSON格式。这样我就可以将其作为AJAX响应发送到客户端。有人可以解释一下如何转换为JSON格式,因为我对Java和JSON都是新手 问题答案: 许多人正确地回答了这个问题。但是,我认为我可以使用以下几小段代码为该帖子添加更多价值。它使用Apache-DBUtils和Gson库。

  • 我有以下代码,它从Marketo系统中获取一些数据 这将返回给我以下数据 我想做的是,保存这个返回到一个拼花文件。但是当我用下面的代码尝试时,我收到了一条错误消息。 我做错了什么?

  • 问题内容: 我想将流结果输出转换为字符串,因为我想在Junit中使用它,我想我需要使用字符串编写器,但是我不确定如何确切地使用它。 谢谢费多 问题答案: 查看并学习使用StreamResult类的javadocs(http://java.sun.com/javase/6/docs/api/)。StreamResult的构造函数之一采用Writer对象作为参数。您将看到Writer的子类之一是Str

  • 问题内容: 我正在尝试在C#字符串变量或字符串数​​组中获取SQL结果。是否有可能?我是否需要以某种方式使用SqlDataReader?对于C#函数和所有函数,我都是新手,曾经在PHP中工作,所以请给出一个可行的示例(如果相关,我已经可以连接并访问数据库,进行插入和选择。。我只是不知道如何将结果存储在字符串变量中)。 问题答案: 这不是历史上最伟大的例子,就像您没有从数据库返回任何行一样,您最终都

  • 我使用Spring数据JPA和Spring Boot应用程序。我有一个属性很少的实体类。假设我有10个属性与实体关联,我只想检索其中的几个(用户名、密码、名字、名字、电子邮件)。 因此,我编写了一个查询,只获取5个字段,但该方法不返回实体对象,而是返回一个普通对象。 如何将查询结果转换为Spring Data JPA中的实体?