2016-05-06 16 views
2

Ich arbeite an einem Projekt, bei dem ich prozesstechnisch eine Anzahl von Kacheln erzeugen muss, die ein Spielbrett definieren. Mein Plan ist, diese "Tile" -Objekte in einer mehrdimensionalen Array-Eigenschaft eines Land-Objekts zu halten. Auf diese Weise entsprechen die Zeile und die Spalte des Arrays der Position der Kachel, sowohl im Array als auch auf dem Spielbrett. Kurz gesagt, ich versuche, etwas in der Art zu tun:Wie initialisiere ich ein mehrdimensionales Array von Objekten in 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(); 

Die Variable 'squaredThing' sollte gleich 25; anstelle der Typoskript Compiler gibt einen Fehler wie folgt aus:

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

Ist Verwendung von mehrdimensionalen Arrays zum Speichern von Objekten auf diese Weise nicht möglich, in Typoskript, oder mache ich einen Fehler in Codestruktur/Syntax?

EDIT: Die Syntax oben aufgeführt ist tatsächlich richtig, ich hatte fälschlich ein Debugging-Zeile in dem Code nach links, die nur von der Anordnung zu der ersten Dimension bezeichnet, wie folgt:

testEnv.thingArray[0].tMethod(); 

Es war, dass verursachte den Kompilierungsfehler.

+0

Ich kann das Problem mit dem Code nicht reproduzieren, den Sie zur Verfügung gestellt haben, es funktioniert hier richtig. Könnte es ein Tippfehler in Ihrer tatsächlichen Quelle sein? Wenn ich 'testEnv.thingArray [0] .tMethod() schreiben;' ist der Fehler, den ich bekomme, identisch mit dem, was Sie beschrieben haben, was erwartet wird. –

+1

Was John White gesagt hat, ist genau richtig, ich hatte versehentlich eine Debugging-Zeile hinterlassen, die sich nur auf die erste Dimension des Arrays bezieht, und das war es, was den Fehler beim Kompilieren verursachte. Danke für die Hilfe! – calebjmatthews

Antwort

0

Sie erstellt nur ein Array, aber Sie wollen zwei, sein sollte:

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

Aber die Fehlermeldung erhalten Sie komisch ist, sollte es beschweren sich über nicht in der Lage zu sein Stück 0 von undefined zu erhalten, wenn Sie tun, :

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

Ich denke, ich kann verstehen, warum die von Ihnen vorgeschlagene Zeile notwendig wäre. Ich habe in der Zeile hinzugefügt, aber ich erhalte immer noch den gleichen Fehler. Der Text des Fehlers klingt fast so, als erwarte er, dass "Thing []" seine eigene Klasse ist, die er nicht finden kann. – calebjmatthews

0

ich nur einen Fehler sehen etwa die Tprop als this.tProp

Sie Referenzierung Haben versucht

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

Alles andere scheint gültig.

+1

Das war ein guter Haken, das habe ich im vereinfachten Beispiel oben vermisst, aber in meinem echten Code richtig als "this.row" bezeichnet, also sollte das nicht das Problem sein. – calebjmatthews

Verwandte Themen