Как объявить TypeScript Type для карты Java карты наборов? - PullRequest
0 голосов
/ 28 августа 2018

В Java у меня есть что-то вроде этого:

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

Я хотел бы объявить соответствующий тип этой карты в TypeScript.

Соответствующий 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 голосов
/ 28 августа 2018

Мы можем объявить Карты в Typescript, так что вы можете попробовать использовать что-то вроде ниже и затем повторить это с помощью foreach.

var dataMap = new Map<number, Map<number,Array<Obj>>>();
0 голосов
/ 28 августа 2018

Тип 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])) {
  }
}
0 голосов
/ 28 августа 2018

Вы можете создать один тип для каждого слоя, например:

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 вы можете получить доступ к Матрице, используя обозначение ассоциативного массива, как вы хотели:

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

Это печатает:

[{"id":1},{"id":2}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...