我正在使用immutable.js,有时我传递字符串键,有时我将数字键传递给我的不可变量。
因此,Immutable.Map
可以有两个相同的孩子:
Map({
1: foo,
'1': bar,
});
这是我真的 - 不 - 想要!
不幸的是,对于密钥类型,immutable不够严格,这让我很头疼。
有没有办法强制immutable.js在保存'em之前将所有数字键转换为字符串?
谢谢。
答案 0 :(得分:0)
您可以创建一个代理(MDN Documentation link),它将检查set
访问者对象中已存在的密钥(无论何种类型),如下所示:
var handler = {
set: function(obj, prop, value) {
if (obj[String(prop)] == undefined && obj[Number(prop)] == undefined) {
obj[String(prop)] = value
}
else {
throw new Error("Already exists")
}
}
};
var p = new Proxy({}, handler);
p[1] = "test" // p: { 1: "test" }
p["2"] = "foo" // p: { 1: "test", 2: "foo" }
p["1"] = "bar" // Throws an "Already exists" error