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

4
我正在处理一个项目,需要程序化生成一些瓷砖来定义游戏板。我的计划是将这些“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();

这就是导致编译错误的原因。

我无法重现您提供的代码问题,它在这里可以正常工作。您的实际源代码中可能有错别字吗?如果我写testEnv.thingArray[0].tMethod();,我得到的错误与您描述的完全相同,这是预期的。 - John Weisz
1
约翰·怀特说得完全正确,我不小心留下了一条调试行,仅涉及数组的第一个维度,正是这个导致编译时出现错误。感谢你的帮助! - calebjmatthews
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;

我想我能理解为什么你建议的那行代码是必要的。我加入了这行代码,但是我仍然收到相同的错误。错误信息的文本似乎在期望'Thing[]'成为它自己的类,但是找不到。 - calebjmatthews

0

我只看到一个关于引用tProp的错误,应该写成this.tProp

你试过了吗?

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

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


1
那是一个很好的发现,在上面的简化示例中我错过了它,但在我的真实代码中正确地引用为“this.row”,所以这不应该是问题。 - calebjmatthews

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接