首页 > 解决方案 > 如何创建具有日期索引的模型?

问题描述

我想使用 Angular 访问 API。它给了我一个以日期为索引的数组。

我已经尝试创建一个模型,但不幸的是,它不起作用。我该如何改变它?

API 答案如下所示

{
    "Information": {
        "Created": "2019-04-25",
        "Version": "1.2"
    },
    "Files": {
        "2019-04-26": {
           'name': 'file1',
           'size': 5,
        },
        "2019-04-25": {
            'name': 'file2',
            'size': 3,
        },
    ...
        }
    }

我的模型看起来像这样

export class Model {
  'Information': {
    'Created': String,
    'Version': String,
  };
  Files: [

    {
     'Date': String,
     'name': String,
     'size': number,
    }
    ];

}

标签: jsonangulartypescriptapi

解决方案


你想要的是一个索引签名,它看起来像这样。

export class Model {
  'Information': {
    'Created': string,
    'Version': string,
  },
  'Files': { 
    [date:string]: {
     'name': string,
     'size': number,
    }
  }
}

它说明类 Model 有一个属性 Files,它是一个具有字符串键和值的对象,这些键和值具有字符串属性名称和数字属性大小。这并不限制键必须匹配某个日期模式,据我所知,我认为没有办法做到这一点。

您也可以编写一个函数,将此响应对象映射到具有 Files 数组的对象,其中数组中的每个对象都包含日期。该映射函数是一个不同的问题,但模型看起来像这样:

export class Model {
  'Information': {
    'Created': string,
    'Version': string,
  },
  'Files': { 
    'date': string, // could also type this as Date if you do the conversions
    'name': string,
    'size': number,
  }[]
}

推荐阅读