TypeScript: viele Objekte über eine Variable aufrufen?
Hi,
(ich arbeite mit TypeScript/Angular)
ich möchte ein Array/Objekt/Interface etc. welchem ich einen individuellen Namen geben kann. Diesem Typen möchte ich dann mehrere Objekte zuweisen können.
Über den Namen des Typen will ich dann die einzelnen Wert aufrufen können.
Ich weis gerade nicht wie ich das umsetzen soll. Bin gerade etwas aufgeschmissen. :)
2 Antworten
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 } ];
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.
ah perfekt, das funktioniert sehr gut, vielen Dank
Typen speichern keine Werte, sondern eben nur Typen.
Mit einem konkreten Beispiel wäre wahrscheinlich klarer, was du genau meinst.
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.
Danke für die Antwort, vielleicht kannst du mir nochmal kurz helfen.
Wie ich es habe:
ich bekomme aber folgende Fehlermeldung:
ERROR Error: Uncaught (in promise): TypeError: Cannot read properties of undefined (reading 'push')