export namespace MapUtil { export function take(map: Map, key: K, value: () => V): V { if (map.has(key)) { return map.get(key) as V; } const newValue = value(); map.set(key, newValue); return newValue; } }