export interface ShorthandWeakMap> { (key: K): V | undefined; (key: K, value: V): V; } export const shorthandWeakMap = () => { const map = new WeakMap(); const fn = (key: K, value?: V) => (value ? map.set(key, value) : map).get(key); return fn as ShorthandWeakMap; };