如何在ES6类中使用Immutable.js?

时间:2016-12-11 21:21:09

标签: javascript immutable.js

以下代码:

class A {constructor(v) {
    this.v = v;
}}
const a = fromJS(new A({a: 42, someOtherSubTree: {}}));
const aMod = a.updateIn(['v', 'a'], x=>43);

...失败了:

TypeError: a.updateIn is not a function

更简单的set也失败了:

TypeError: a.set is not a function

我发现this related question标有'typescript'标签,所以我不确定“包装”方法是如何建议转换为纯ES6的。

1 个答案:

答案 0 :(得分:1)

const a = fromJS(new A({a: 42, someOtherSubTree: {}}));之后typeof a仍然是一个对象,而Map就像预期的那样。它返回原始对象。

这部分来自Immutable代码说明原因。因为你的对象A不是"普通对象" (参见函数)也不是数组,它只是按原样返回。

function fromJSDefault(json) {
    if (Array.isArray(json)) {
      return IndexedSeq(json).map(fromJSDefault).toList();
    }
    if (isPlainObj(json)) {
      return KeyedSeq(json).map(fromJSDefault).toMap();
    }
    return json;
}
// […]
function isPlainObj(value) {
    return value && (value.constructor === Object || value.constructor === undefined);
}