Typoskript. Wie man Objekt die Eigenschaft name der Wert?

Schreibe ich Typoskript Klasse für die Verwendung mit unveränderlich Karte

class NavigableObject<T> {
    constructor(private obj: T, private path: string[] = []) { }

    To<R>(p: (x: T) => R): NavigableObject<R> {
        return new NavigableObject<R>(p(this.obj),
                       this.path.concat(this.getPropName(p(this.obj))));
    }

    getPath() {
        return this.path;
    }

    private getPropName(value) {
        for (var item in this.obj) {
            if (this.obj[item] === value) {
                return item;
            }
        }
    }
}

let test = {
    a: {
        a1: 1,
        a2: 1
    },
    b: {
        b1: 1,
        b2: 2
    }
}

let navigableTest = new NavigableObject(test);

navigableTest.To(m => m.b).To(m => m.b2).getPath(); //= ["b", "b2"]

navigableTest.To(m => m.a).To(m => m.a2).getPath(); //= ["a", "a1"] <-- I selected a2, tho

Gibt es ein problem mit getPropName Methode. Wenn obj hat zwei Eigenschaften mit demselben Wert, die nur die erste Eigenschaft angepasst werden.

Weiß jemand, wie dies zu umgehen?

  • Was willst du geschehen? Ein array von keys? Ein Fehler für nicht-Eindeutigkeit? Was?
  • Ein Objekt ist Schlüssel eindeutig sein soll. Können Sie ein Beispiel geben, wie/warum würden Sie haben ein Objekt mit mehr als Schlüssel mit dem gleichen Namen?
  • Ich meine, ein Objekt hat zwei Eigenschaften mit demselben Wert (nicht Schlüssel).
  • Ich will starke Typisierung bei der Auswahl von "Eigenschaften" und dann wieder voller-Pfad für die Verwendung mit unveränderlich Landkarte.
InformationsquelleAutor Hoang Hiep | 2016-05-05
Schreibe einen Kommentar