【问题标题】:How do I initialize a multidimensional array of Objects in TypeScript?如何在 TypeScript 中初始化对象的多维数组?
【发布时间】:2016-09-01 21:35:17
【问题描述】:

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

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 White 说的完全正确,我不小心留下了一个调试行,它只引用了数组的第一维,而正是这个在编译时抛出了错误。感谢您的帮助!

标签: object multidimensional-array typescript


【解决方案1】:

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

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

但是你收到的错误信息很奇怪,它应该抱怨在你做的时候无法从undefined获取项目0:

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

【讨论】:

  • 我想我可以理解为什么您建议的行是必要的。我在该行中添加了,但我仍然收到相同的错误。错误的文本几乎听起来像是在期待 'Thing[]' 是它自己的类,但它无法找到。
【解决方案2】:

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

的错误

你试过了吗

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

其他一切看起来都有效。

【讨论】:

  • 这很好,我在上面的简化示例中错过了这一点,但在我的真实代码中正确地将其称为“this.row”,所以这不应该是问题。
猜你喜欢
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 2021-02-22
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多