TypeScript: viele Objekte über eine Variable aufrufen?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Dafür kannst du ein Dictionary anlegen.

Beispiel:

interface ILocation {
  x: number;
  y: number;
}

const areas: { [name: string]: ILocation[]; } = {};

// add:
areas["area_xyz"] = [ { x: 2, y: 3 } ];


Haenschenklein0 
Beitragsersteller
 02.06.2022, 10:47

Danke für die Antwort, vielleicht kannst du mir nochmal kurz helfen.

Wie ich es habe:

 export Interface ConnectingLines {
    x: number
    y: number
    xI: number
    yI: number
}
private areas: { [name: string]: ConnectingLines[]; } = {};


function(zbLat: number, zbLong: number, zspLat: number, zspLong: number, name: string) {

  this.areas[name].push({x: zbLat, y: zbLong, xI: zspLat, yI: zspLong}):

}

ich bekomme aber folgende Fehlermeldung:
ERROR Error: Uncaught (in promise): TypeError: Cannot read properties of undefined (reading 'push')

regex9  02.06.2022, 12:03
@Haenschenklein0

Du wirst wohl auf den Fall gestoßen sein, bei dem es noch keinen Eintrag zu dem Wert gibt, der in name steht.

So wäre es richtig:

const line: ConnectingLine = { x: zbLat, y: zbLong, xI: zspLat, yI: zspLong };

if (this.areas.hasOwnProperty(name)) {
  this.areas[name].push(line);
}
else {
  this.areas[name] = [ line ];
}

Wenn das Property bereits existiert (im Grunde erstellst du im Objekt mit jedem neuen Eintrag ein neues Property), dann wird es angehängt. Andernfalls wird ein neues Property erstellt und in diesem ein Array mit deinem Objekt als ersten Eintrag eingefügt.

Beachte im Übrigen noch folgende Punkte:

  • Deiner Funktion fehlt ein Name. Sie sollte nicht function heißen, denn das ist ein Schlüsselwort.
  • Dein Interface beschreibt eine einzige Linie, sollte daher auch in Singularform benannt werden: ConnectingLine. Ein Array ändert daran auch nichts, denn ConnectingLine[] ist ein Array vom Typ ConnectingLine.
  • Das Schlüsselwort interface beginnt mit einem kleinen i. Ich vermute allerdings, dass das nur ein Tippfehler in deinem Kommentar war.

Typen speichern keine Werte, sondern eben nur Typen.

Mit einem konkreten Beispiel wäre wahrscheinlich klarer, was du genau meinst.

Woher ich das weiß:Berufserfahrung – Informatiker Applikationsentwicklung

Haenschenklein0 
Beitragsersteller
 31.05.2022, 11:02

Ich arbeite zurzeit an einer Deutschlandkarte auf der ich verschiedene Bezirke angeben kann. Jeder Bezirk soll nun einzelne Standorte erhalten. Ich möchte also irgendwie die einzelnen Standorte mit dem dazugehörigen Bezirk verknüpfen um sie später ein/ausblenden zu können.