type AnyMap = Map | WeakMap export function getOrCreate(map: Map, key: K, create: () => C): V export function getOrCreate( map: WeakMap, key: K, create: () => C ): V export function getOrCreate(map: AnyMap, key: any, create: () => V) { let value = map.get(key) if (value === undefined) { value = create() map.set(key, value) } return value }