declare global { interface Map { toReadonly(): ReadonlyMap; } } export class RuntimeReadonlyMap implements ReadonlyMap { public constructor(private readonly _wrap: Map) { } public forEach(callbackfn: ( value: V, key: K, map: ReadonlyMap) => void, thisArg?: any, ): void { return this._wrap.forEach(callbackfn, thisArg); } public get(key: K): V | undefined { return this._wrap.get(key); } public has(key: K): boolean { return this._wrap.has(key); } public get size(): number { return this._wrap.size; } public entries(): MapIterator<[K, V]> { return this._wrap.entries(); } public keys(): MapIterator { return this._wrap.keys(); } public values(): MapIterator { return this._wrap.values(); } public [Symbol.iterator](): MapIterator<[K, V]> { return this._wrap[Symbol.iterator](); } } Map.prototype.toReadonly = function (): ReadonlyMap { return new RuntimeReadonlyMap(this); }