【发布时间】:2016-05-05 10:32:34
【问题描述】:
我正在编写一个用于immutable map 的打字稿类
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
getPropName 方法有问题。当obj 有两个属性值相同时,只会匹配第一个属性。
有人知道如何解决这个问题吗?
【问题讨论】:
-
你想要发生什么?一组键?非唯一性错误?什么?
-
一个对象的键应该是唯一的。您能否举例说明如何/为什么要拥有一个具有多个同名键的对象?
-
我的意思是,一个对象有两个属性值相同(键不同)。
-
@NiettheDarkAbsol 我想在选择属性时获得强类型,然后返回完整路径以用于immutable map。
标签: javascript typescript immutable.js