如何声明Set of Java Map的TypeScript类型?

时间:2018-08-28 12:08:29

标签: java arrays json typescript dictionary

在Java中,我有这样的东西:

public class MyMatrix implements Map<Long, Map<Long, Set<MyObject>>> {...}

我想做的是在TypeScript中声明此Map的相应类型。

对应的JSON是:

{
   "1":{
      "1":[{"id":1},{"id":2}]
   },
   "2":{
      "1":[{"id":2},{"id":3}]
   }
}

我希望能够使用关联数组表示法访问它,例如myArray[1][1] should return [{"id":1},{"id":2}]

我尝试使用类似

var myMatrix: Array<Array<Array<MyObjec>>>;

但没有运气。

尝试以下代码时:

for (const x in Object.keys(this.myMatrix)) {
  for (const y in Object.keys(this.myMatrix[x])) {
  }
}

在第二个for循环上出现以下错误:

ERROR TypeError: Cannot convert undefined or null to object
    at Function.keys (<anonymous>)

希望我发现了一些提示:该错误的原因似乎是在第一个循环中Object.keys'0'开始而不是'1'这对我来说甚至很陌生。

3 个答案:

答案 0 :(得分:1)

HugoTeixeira的类型对我来说很正确。这段代码:

for (const x in Object.keys(this.myMatrix)) {
  for (const y in Object.keys(this.myMatrix[x])) {
  }
}

应为:

for (const x of Object.keys(this.myMatrix)) {
//           ^^
  for (const y of Object.keys(this.myMatrix[x])) {
  }
}

答案 1 :(得分:0)

您可以为每个图层创建一种类型,如下所示:

interface Column { 
    id: number;
}

interface Row { 
    [key: number]: Array<Column>;
}

class Matrix {
    [key: number]: Row;
}

然后您可以创建一个像这样的矩阵:

const myMatrix: Matrix = {  
    "1":{
        "1":[{"id":1},{"id":2}]
    },
    "2":{
        "1":[{"id":2},{"id":3}]
    }
};

通过Typescript代码,您可以根据需要使用关联数组符号访问Matrix:

const arr = myMatrix[1][1];
console.log(JSON.stringify(arr));

此打印:

[{"id":1},{"id":2}]

答案 2 :(得分:0)

我们可以在Typescript中声明Maps,因此您可以尝试使用如下所示的内容,然后使用foreach对其进行迭代。

var dataMap = new Map<number, Map<number,Array<Obj>>>();