export type UnionToIntersection = ( T extends any ? (x: T) => any : never ) extends (x: infer R) => any ? R : never; type _ = A; type UnReadonly = { -readonly [k in keyof A]: A[k] }; declare global { interface Object { entries( this: T, ): Array<{ -readonly [K in keyof T]: [K, T[K]] }[keyof T]>; values(this: T): Array; keys(this: T): Array; } interface Array { fromEntries(): UnionToIntersection< T extends [infer Key, infer Value] ? { [k in Key extends string | number ? Key : never]: Value } : never >; assignObject(): UnionToIntersection; } } Object.prototype.entries = function () { return Object.entries(this) as any; }; Object.prototype.values = function () { return Object.values(this) as any; }; Object.prototype.keys = function () { return Object.keys(this) as any; }; Array.prototype.fromEntries = function () { return Object.fromEntries(this) as any; }; Array.prototype.assignObject = function () { return Object.assign({}, ...this) as any; };