具有索引

时间:2019-05-23 17:08:10

标签: typescript

我有如下数据:

let equipment:Equipment =  {
  "1": {
    "name": "abc",
    "data": 123
  },
  "2": {
    "name": "def",
    "data": 234
  },
  "3": {
    "name": "ghi",
    "data": 345
  },
  ...
}

这很容易放入数组中,但是我的设备ID以1开头,我不想处理排除[0](将为空)元素的逻辑。

鉴于此,我想出了以下TypeScript声明文件。

interface Equipment 
{ 
  [ k: number ]: EquipmentBase;
}

interface EquipmentBase 
{
  name: string
  data: number
}

此外,当我将这个设备对象与其他对象一起返回时,我需要将其放在需要另一个接口声明的JSON对象中。

interface EquipmentObj
{
  equipment: Equipment
}

/* returns {equipment: 
  {
  "1": {
    "name": "abc",
    "data": 123
  },
  "2": {
    "name": "def",
    "data": 234
  },
  "3": {
    "name": "ghi",
    "data": 345
  },
  ...
  }
}

*/

这就像在声明一个持有数据的对象的声明(Equipment,EquipmentObj)过多。是否有其他/更好的方式来减少我正在使用的声明的数量?

1 个答案:

答案 0 :(得分:0)

好吧,您可以做到这一点:

interface EquipmentObj
{
  equipment: {
    [k: number]: {
      name: string
      data: number
    }
  }
}

但是,您再也不能将任何内容声明为内部类型之一。

因此,如果您需要以EquipmentEquipmentBase的形式键入变量,参数或返回类型,则无法将其折叠。