通过JSON响应初始化地图

时间:2019-06-06 10:30:45

标签: typescript

我从API接收到的数据格式如下:我收到的JSON是带有数字键的映射条目。但是,由于编译器抱怨由于明显的原因缺少Map方法,因此我无法将结果分配给下面的数据结构。

entryContainer = {
    entries: {
        1: {
            title: 'title 1'
        },
        2: {
          title: 'title 2'
        }
}

export interface EntryContainer {
    entries: Map<number, Entry>;
}

export interface Entry {
    title: string;
}

// doesn't work
let result: EntryContainer = entryContainer;

有什么优雅的方法可以用上述格式接收的数据初始化Entrycontainer吗?

1 个答案:

答案 0 :(得分:0)

您收到的数据上的entries不是Map,因此您必须创建一个Map

好消息是,Object.entriesnew Map的实现非常简单:

let result: EntryContainer = {
    entries: new Map(Object.entries(entryContainer.entries).map(([key, value]) => [+key, value]))
};

那个:

  • 使用Object.entries来获取[string, string]的数组。
  • 使用map来获取[number, string]的数组。 (请记住,即使entryContainer对象中的键被写为数字文字,对象中的键也始终是字符串或符号。)
  • 获取[number, string]的结果数组并创建entries映射
  • 围绕“条目”创建EntryContainer包装器

您需要确保正确设置target和/或lib选项。 Map当然是ES2015。 Object.entries是ES2017。