首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类型记录中将大接口转换为小接口

在类型记录中将大接口转换为小接口
EN

Stack Overflow用户
提问于 2017-11-26 13:50:56
回答 1查看 540关注 0票数 2

我有一个名为IHistoryData的接口

代码语言:javascript
复制
export interface IHistoryData {
    CourseId: string,
    CourseName: string,
    Duration: number,
    IsMandatory: boolean,
    CompetencyList: string[],
    IsActive:boolean
}

第二个小接口叫做ICurrentData,

代码语言:javascript
复制
export interface ICurrentData {
    CourseId: string,
    CourseName: string,
    Duration: number,
}

ICurrentData属性是IHistoryData属性的子集。

现在,我正试图使用IHistoryData[]、ES6、析构特性将其转换为ICurrentData[],但无法找到任何可行的解决方案。是否可以使用析构将大接口转换为小接口??

我使用的是TS 2.3.3和角4.4

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-26 14:08:29

你可以把结构分解成地图的一部分,或者你只需要映射.无论哪种方式都没有很大的差别,所以选择最易读的是什么。

对于所有示例,我在变量input中使用源数据。

快速换型

如果您只需要更改类型,实际上不需要映射,因为您可以将input分配给ICurrentData[],因为它是一个兼容的类型。从技术上讲,数据仍然存在于输入中,但是当您使用output时,它只会自动完成属性的子集。

代码语言:javascript
复制
const output: ICurrentData[] = input;

解构

在财产名称相同的地方,你可以这样拆解.

代码语言:javascript
复制
const output: ICurrentData[] = input.map((history) => {
  const { CourseId, CourseName, Duration } = history;
  return {
    CourseId,
    CourseName,
    Duration
  };
});

alert(JSON.stringify(output));

负解构

您还可以通过列出您不希望在析构分配中映射的项来执行“负析构”,并使用rest参数获取您想要的所有内容。这是一个巧妙的技巧,但我不喜欢“你不想要的东西”的耦合。如果您只需要从20个属性中删除一个或两个属性,它可能是一个选项。

代码语言:javascript
复制
const output: ICurrentData[] = input.map((history) => {
  const { IsMandatory, CompetencyList, IsActive, ...data } = history;
  return data;
});

alert(JSON.stringify(output));

不同的财产名称

如果源数据对属性有不同的名称(例如,ABC),则可以将其映射为析构的一部分。

代码语言:javascript
复制
const output: ICurrentData[] = input.map((history) => {
  const { A: CourseId, B: CourseName, C: Duration } = history;
  return {
    CourseId,
    CourseName,
    Duration
  };
});

alert(JSON.stringify(output));

简单地图

有时候,简单是美丽的。这是一个简单的映射,使用与前面示例相同的属性。

代码语言:javascript
复制
const output: ICurrentData[] = input.map((history) => {
  return {
    CourseId: history.A,
    CourseName: history.B,
    Duration: history.C
  };
});

alert(JSON.stringify(output));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47496856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档