如何在 TypeScript 中初始化多维对象数组?

问题描述 投票:0回答:2

我正在开发一个项目,我需要按程序生成许多定义游戏板的图块。我的计划是将这些“Tile”对象保存在“Land”对象的多维数组属性中。这样,数组的行和列对应于图块在数组中和游戏板上的位置。简而言之,我正在尝试做这样的事情:

class Thing {
   tProp: number = 5;
   tMethod() {this.tProp *= this.tProp;}
}

class Environment {
   thingArray: Thing[][];
}

var testEnv = new Environment;
testEnv.thingArray = [];
testEnv.thingArray[0] = [];
testEnv.thingArray[0][0] = new Thing;
var squaredThing = testEnv.thingArray[0][0].tMethod();

变量“squaredThing”应等于 25;相反,TypeScript 编译器会返回如下错误:

"error TS2339: Property 'tMethod' does not exist on type 'Thing[]'"

在 TypeScript 中使用多维数组以这种方式存储对象是不可能的,还是我在代码结构/语法中犯了错误?

编辑:上面列出的语法实际上是正确的,我错误地在代码中留下了调试行,该行仅引用数组的第一维,如下:

testEnv.thingArray[0].tMethod();

就是这个导致了编译错误。

object multidimensional-array typescript
2个回答
0
投票

您只创建了一个数组,但您想要两个,应该是:

testEnv.thingArray = [];
testEnv.thingArray[0] = []; // you are missing this
testEnv.thingArray[0][0] = new Thing;

但是你收到的错误消息很奇怪,它应该抱怨当你这样做时无法从

undefined
获取项目0:

testEnv.thingArray[0][0] = new Thing;

0
投票

我只看到有关将 tProp 引用为 this.tProp

的错误

你尝试过吗

class Thing {
  tProp: number = 5;
  tMethod() { this.tProp *= this.tProp;}
}

其他一切看起来都有效。

© www.soinside.com 2019 - 2024. All rights reserved.