以下代码:
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的。
答案 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);
}