将对象属性更改/映射到枚举值

时间:2021-03-28 17:43:31

标签: javascript typescript

我从后端得到一个数据对象,如下所示:

  data: [
            {description: 'desc', timestamp: yesterday, type: 'Repair', repair: {}},
            {description: 'desc', timestamp: oneMonthBack, type: 'Checked', readout: {}},
            {description: 'desc', timestamp: threeMonthBack, type: 'False', fault: {}},
            {description: 'desc', timestamp: yesterday, type: 'Read', falseRead: [{}]},
            {description: 'desc', timestamp: yesterday, type: 'Clear'}
          ],

在前端,我们通过一个枚举更改了数据“类型”:

export enum ProductEventType {
  FAULT = 'Alert',//Old "False"
  REPAIR = 'repair', //old 'Repair'
  DELIVERY = 'Delivery', //same as before
  CHECKIN = 'check-in', //old 'checked' 
  READFAULTS = 'readFaults',  //old Read
  CLEARFAULTS = 'ClearFaults', //old Clear
}

当我们从后端获取数据时,我们使用地图并检查每个项目:

this.vehicleEvents.data.forEach((item) => {

      if (RepairEvent.isRepairEvent(item)) {...}

RepairEvent.isRepairEvent 内部存在问题,错误在于我们匹配数据的后端名称和前端枚举名称。注意我们导入并使用了枚举类型:

export class ClearFaultsEvent extends ProductTimelineEvent {
  public static isClearFaultsEvent(event: ProductTimelineEvent): event is ClearFaultsEvent {
    return event.type === ProductTimelineEventType.CLEARFAULTS; 

//err, event.type is 'Clear' while the enumtype have the name "ClearFaults"
      }

在上面的代码中,我们将数据的后端名称与枚举中的名称进行比较,显然返回 false,但我们想要 true。我们希望 event.type 以某种方式映射或与枚举值组合,以便条件起作用。至于现在它永远是假的。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

你似乎在要求这个

library(MASS)
md <- lda(k~., data = df)
df$pred <- predict(md, df)$class

但它没有扩展。更明智的更改是创建符合后端 API 的适配器类。

现在我很惊讶枚举的值对你很重要。如果您需要根据枚举值执行一些 IO,则演示者应该负责将它们转换为正确的输出。您不希望业务规则了解视图。

相关问题