簡體   English   中英

如何為集合映射的 Java 映射聲明 TypeScript 類型?

[英]How to declare the TypeScript Type for a Java Map of Map of Sets?

在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' ,這對我來說更陌生。

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])) {
  }
}

您可以為每一層創建一種類型,如下所示:

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}]

我們可以在 Typescript 中聲明 Maps,因此您可以嘗試使用如下所示的內容,然后使用 foreach 對其進行迭代。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM