export class Store extends Map { constructor(protected readonly factory: () => V, entries?: readonly (readonly [K, V])[] | null) { super(entries); } public get(key: K, create = true): V { if (this.has(key)) { return super.get(key)!; } if (create) { const value = this.factory(); this.set(key, value); return value; } throw new Error('Value not found.'); } }