Hur initierar jag en flerdimensionell array av objekt i TypeScript?


Jag arbetar på ett projekt där jag behöver procedurgenerera ett antal brickor som definierar ett spelbräde. Min plan är att hålla dessa 'Tile'-objekt i en flerdimensionell array-egenskap hos ett 'Land'-objekt. På detta sätt motsvarar raden och kolumnen i arrayen brickans position, både i arrayen och på spelbrädet. Kort sagt, jag försöker göra något som detta:

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();

Variabeln 'squaredThing' borde vara lika med 25; istället returnerar TypeScript-kompilatorn ett fel som detta:

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

Är användning av flerdimensionella arrayer för att lagra objekt på det här sättet inte möjlig i TypeScript, eller gör jag ett fel i kodstruktur/syntax?

REDIGERA: Syntaxen som anges ovan är faktiskt korrekt, jag hade av misstag lämnat en felsökningsrad i koden, som endast hänvisade till arrayens första dimension, som följer:

testEnv.thingArray[0].tMethod();

Det var detta som orsakade kompilationsfelet.

Svar #1

Du skapade bara en array men du vill ha två, det borde vara:

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

Men felmeddelandet du får är konstigt, det borde klaga på att det inte går att hämta objekt 0 från undefined när du gör:

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

Svar #2

Jag ser bara ett fel om att referera till tProp som this.tProp

Har du försökt

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

Allt annat ser giltigt ut.

Relaterade artiklar