簡體   English   中英

Typescript 接口類型映射到一個對象,該對象由原始對象和從原始對象的字段構建的新對象組成

[英]Typescript interface type mapping to an object that consists of an original object and a new object built from original object's fields

我想將一個類型 X 映射到另一個由 X 和 Z 組成的類型 Y,其中 Z 包含 X 的兩個值。聽起來很復雜,所以你會找到下面的代碼。

對於來自數據庫的數據對象,我有以下模型:

export interface Task {
 description: string;
 name: string;
 beginDate: string;
 endDate: string;
}

調用數據庫后,我想將這些對象映射到以下類型:

export interface TaskWithDate {
 task: Task;
 fullDate: FullDate;
}

其中 FullDate 是具有以下定義的接口:

export Interface FullDate {
 beginDate: string;
 endDate: string;
}

...它應該用來自Task beginDateendDate填充。

所以,我打電話給數據庫並想做映射:

tasks: Task[];
this.tasks = this.getAllTasks(); // db call
this.ticketsWithDate = this.tasks.map(
      t => { return <TasktWithDate>{ task: t, fullDate: null }}
    );

問題:如何獲取Task ( t ) 的startDateendDate以在 map 函數中創建FullDate對象?

像您一樣遍歷任務數組,然后從中映射您需要的相應字段以形成TaskWithDate數組,如下所示:

ticketsWithDate: TaskWithDate[];

this.ticketsWithDate = this.tasks.map(
  tsk => {
    return {
      task: tsk,                       // map entire task object
      fullDate: {                      // fetch begin and end dates from task to 
        beginDate: tsk.beginDate,      // form a new key i.e fullDate
        endDate: tsk.endDate
      }
    };
  }
);

很簡單,你為什么不試試這個,

this.ticketsWithDate = this.tasks.map(
    t => { 
        let fullDate: FullDate = {
            beginDate = t.beginDate,
            endDate = t.endDate
        }

        return <TasktWithDate>{ task: t, fullDate: fullDate }
    }
);

或這個,

this.ticketsWithDate = this.tasks.map(
t => { 
    return <TasktWithDate>{ task: t, fullDate: {
        beginDate = t.beginDate,
        endDate = t.endDate
    }
    }
}

);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM