export class DefaultMap extends Map { _getDefault: (arg1: K) => V; constructor(getDefault: (arg1: K) => V, entries?: Iterable<[K, V]>) { super(entries); this._getDefault = getDefault; } get(key: K): V { let ret; if (this.has(key)) { ret = super.get(key); } else { ret = this._getDefault(key); this.set(key, ret); } return ret as V; } } interface Key {} // Duplicated from DefaultMap implementation for Flow // Roughly mirrors https://github.com/facebook/flow/blob/2eb5a78d92c167117ba9caae070afd2b9f598599/lib/core.js#L617 export class DefaultWeakMap extends WeakMap { _getDefault: (arg1: K) => V; constructor(getDefault: (arg1: K) => V, entries?: Iterable<[K, V]>) { super(entries as Iterable); this._getDefault = getDefault; } get(key: K): V { let ret; if (this.has(key)) { ret = super.get(key); } else { ret = this._getDefault(key); this.set(key, ret); } return ret as V; } }