Tapuscrit. Comment obtenir de l'objet nom de la propriété à partir de sa valeur?

Je suis en train d'écrire un texte dactylographié de classe pour l'utilisation avec immuable la carte

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

Il y a un problème avec getPropName méthode. Lorsque obj a deux propriétés avec la même valeur, seule la première sera mis en correspondance.

Personne ne sait comment contourner ce problème?

Que voulez-vous arriver? Un tableau de clés? Une erreur de la non-unicité? Quoi?
Un objet de touches doit être unique. Pouvez-vous donner un exemple de comment/pourquoi vous auriez un objet avec plus de touche du même nom?
Je veux dire, un objet possède deux propriétés avec la même valeur (pas même clé).
Je veux obtenir un typage fort lors de la sélection des propriétés et ensuite de retour à chemin-complet pour une utilisation avec un immuables de la carte.

OriginalL'auteur Hoang Hiep | 2016-05-05