有没有办法强制immutable.js使用字符串id?

时间:2017-08-18 18:29:16

标签: javascript immutable.js

我正在使用immutable.js,有时我传递字符串键,有时我将数字键传递给我的不可变量。

因此,Immutable.Map可以有两个相同的孩子:

Map({
    1: foo,
    '1': bar,
});

这是我真的 - - 想要

不幸的是,对于密钥类型,immutable不够严格,这让我很头疼。

有没有办法强制immutable.js在保存'em之前将所有数字键转换为字符串?

谢谢。

1 个答案:

答案 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