数组 - 如何声明 TypeScript 类型以表示一个 Java 的 Map 的 Map 的 Set?
在 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] 应该返回 [{"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',这对我来说甚至更奇怪。
答案#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])) {
}
}
答案#2
你可以为每一层创建一种类型,就像这样:
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}]
