具有索引的对象的Typescript定义模式

具有索引的对象的Typescript定义模式,typescript,Typescript,我有如下数据: let equipment:Equipment = { "1": { "name": "abc", "data": 123 }, "2": { "name": "def", "data": 234 }, "3": { "name": "ghi", "data": 345 }, ... } 这很容易放入数组,但我的设备ID以1开头,我不想处理排除[0](将为null)元素的逻辑 鉴于此,我提出了以下类型

我有如下数据:

let equipment:Equipment =  {
  "1": {
    "name": "abc",
    "data": 123
  },
  "2": {
    "name": "def",
    "data": 234
  },
  "3": {
    "name": "ghi",
    "data": 345
  },
  ...
}
这很容易放入数组,但我的设备ID以1开头,我不想处理排除[0](将为null)元素的逻辑

鉴于此,我提出了以下类型脚本声明文件

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

interface EquipmentBase 
{
  name: string
  data: number
}
此外,当我和其他人一起返回这个设备对象时,我需要将它放在一个JSON对象中,这个JSON对象还需要另一个接口声明

interface EquipmentObj
{
  equipment: Equipment
}

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

*/

这感觉就像是为了声明一个保存数据的对象而进行了过多的声明(设备、设备Obj)。是否有其他/更好的方法来减少我使用的声明数量?

好的,您可以这样做:

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

因此,如果您需要将变量、参数或返回类型键入为
Equipment
EquipmentBase
,则无法将其折叠。

好的,您可以这样做:

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


因此,如果您需要将变量、参数或返回类型键入
Equipment
EquipmentBase
,则无法将其折叠。

“我不想处理排除[0]的逻辑,但使用
{[k:number]}
您必须处理更多的病理情况,如
[-123]
[0.5]
[NaN]
@p.s.w.g我控制着所有的索引,所以我真的不需要担心来自代码其他部分的东西。那么为什么不直接从0开始数组索引呢?当然,使用惯用数组要比想出所有这些解决办法简单。我在控制外部设备。外部设备的索引从1开始。在我的代码的许多其他部分中,如果存储/控制/监控设备[0],而它实际上是“设备1”,那就更令人困惑了。“我不想处理排除[0]的逻辑”,但是使用
{[k:number]}
你必须处理更多的病理情况,比如
[-123]
[0.5]
[南]
@p.s.w.g我正在控制所有的索引,所以我真的不需要担心来自代码其他部分的类似内容。那么为什么不将数组索引从0开始呢?当然,使用惯用数组比尝试想出所有这些解决方法要简单。我在控制外部设备。外部设备有很多好处从1开始的索引。在我的代码的许多其他部分中,如果存储/控制/监视设备[0],而实际上它是“设备1”,则会更加混乱。谢谢。这确实回答了我的问题。我需要声明三个接口,其中2个非常类似于原语,这似乎有点傻。但事实就是这样。我确实有不同的特定类型的用例。谢谢。这确实回答了我的问题。我需要声明三个接口,其中2个非常类似于原语,这似乎有点傻模拟。但事实就是这样。我确实有不同的特定类型的用例。
interface EquipmentObj
{
  equipment: {
    [k: number]: {
      name: string
      data: number
    }
  }
}