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

t3psigkw  于 2023-01-31  发布在  TypeScript
关注(0)|答案(2)|浏览(172)

我正在做一个项目,我需要程序化地生成一些定义游戏棋盘的瓦片。我的计划是将这些瓦片对象保存在一个“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();

正是这一点导致了编译错误。

x8diyxa7

x8diyxa71#

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

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

但您收到的错误消息很奇怪,它应该抱怨无法从undefined获取项目0,当您正在执行:

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

kiayqfof2#

我只看到将tProp引用为this. tProp的错误
你有没有试

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

其他一切看起来都是有效的。

相关问题