扩展 Immutable.js 类型

Extend Immutable.js types

我想扩展地图 class 的功能。例如,我想执行以下操作:

const someMap = Immutable.Map({ a: 1, b: 2 });
const {a, b} = someMap.batchGet('a,' 'b');

如何正确地将 'batchGet' 方法添加到 Map class?

不幸的是,核心 Immutable 类 默认情况下不可扩展。这是一个旨在阻止 anti-patterns 和提高性能的设计决定,有关详细信息,请参阅 this discussion

也就是说,您可以使用 extendable-immutable 扩展 Immutable,它是 philpl 为响应上述 github 问题而创建的。对你来说,这看起来像:

import { Map } from 'extendable-immutable'

class MyMap extends Map {
  batchGet (...keys) {
    let result = {}
    keys.forEach(key => { result[key] = this.get(key) })
    return result
  }
}

const myMap = MyMap({ a: 1, b: 2 })
const {a, b} = myMap.batchGet('a', 'b')