2016-05-06 2 views
2

Я работаю над проектом, где мне нужно процедурно генерировать множество плиток, которые определяют игровое поле. Мой план состоит в том, чтобы удерживать эти объекты «Tile» в многомерном массиве объекта «Земля». Таким образом, строка и столбец массива соответствуют положению плитки, как в массиве, так и на игровой доске. Короче говоря, я пытаюсь сделать что-то вроде этого:Как инициализировать многомерный массив объектов в TypeScript?

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; вместо машинописи компилятор возвращает ошибку, как это:

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

является использование многомерных массивов для хранения объектов таким образом, не представляется возможным в машинописи, или я делаю ошибку в структурах коды/синтаксисе?

EDIT: Синтаксис перечисленных выше на самом деле правильно, я по ошибке оставил отладки строку в коде, который упоминается только в первом измерении массива следующим образом:

testEnv.thingArray[0].tMethod(); 

Именно это вызвала ошибку компиляции.

+0

Я не могу воспроизвести проблему с кодом, который вы предоставили, он работает правильно здесь. Может быть, это опечатка в вашем реальном источнике? Если я напишу 'testEnv.thingArray [0] .tMethod();' ошибка, которую я получаю, идентична тому, что вы описали, что ожидается. –

+1

Что Джон Уайт сказал точно, я случайно оставил строку отладки, ссылаясь исключительно на первое измерение массива, и именно это метало ошибку при компиляции. Спасибо вам за помощь! – calebjmatthews

ответ

0

Вы только создали один массив, но вы хотите два, должно быть:

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

Но сообщение об ошибке вы получите странно, он должен жаловаться не в состоянии получить элемент 0 из undefined когда вы делаете :

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

Думаю, я могу понять, почему линия, которую вы предложили, будет необходима. Я добавил в строку, но я все еще получаю ту же ошибку. Текст ошибки почти звучит так, будто он ожидает, что «Thing []» станет его собственным классом, которого он не может найти. – calebjmatthews

0

Я вижу только ошибку о ссылающийся на tProp в this.tProp

У вас проверено

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

Все остальное выглядит действительным.

+1

Это был хороший улов, я пропустил это в упрощенном примере выше, но правильно назвал его «this.row» в моем реальном коде, так что это не должно быть проблемой. – calebjmatthews

Смежные вопросы