@cch137/format-utils
Version:
A collection of utility modules for formatting and processing data
35 lines • 2.29 kB
TypeScript
type KeysWithOptional<T> = {
[K in keyof T]-?: {} extends {
[P in K]: T[K];
} ? K : never;
}[keyof T];
type MergedProperties<A, B, K extends keyof A & keyof B> = {
[P in K]: A[P] | Exclude<B[P], undefined>;
};
type Identity<T> = T extends infer U ? {
[K in keyof U]: U[K];
} : never;
type MergeImplement<A, B> = Identity<Pick<B, Exclude<keyof B, keyof A>> & Pick<A, Exclude<keyof A, KeysWithOptional<A>>> & Pick<A, Exclude<KeysWithOptional<A>, keyof B>> & MergedProperties<B, A, KeysWithOptional<A> & keyof B>>;
export type Merge<L extends readonly [...any]> = L extends [infer A, ...infer B] ? MergeImplement<A, Merge<B>> : unknown;
export declare function merge<T extends object[]>(...objs: [...T]): Merge<T>;
export declare const nullPrototype: object | null;
export declare function getPrototypesOf(obj: object): object[];
export declare function getAllKeys(obj: object): (string | symbol)[];
export declare function getAllDescriptors<T extends object>(obj: T): { [P in keyof T]: TypedPropertyDescriptor<T[P]>; } & {
[x: string]: PropertyDescriptor;
};
export declare const isObject: (value: any) => value is object;
type CircularPointer = {
o: number | `${number}`;
};
export declare function decircular(obj: object): object[];
export declare function decircular(obj: object, level: number, objectLevels: object[][], objectIds: Map<object, CircularPointer>, encodedObjects: Map<object, object>): CircularPointer;
export declare function encircular<T extends object = object>(series: object[]): T;
export type PickKeys<T, K extends Array<keyof T> | undefined = undefined> = K extends undefined ? T : Pick<T, K extends Array<infer U> ? U : never>;
export type OmitKeys<T, K extends Array<keyof T> | undefined = undefined> = K extends undefined ? T : Omit<T, K extends Array<infer U> ? U : never>;
export declare function pick<T extends object, K extends Array<keyof T>>(obj: T, keys: K): PickKeys<T, K>;
export declare function omit<T extends object, K extends Array<keyof T>>(obj: T, keys: K): OmitKeys<T, K>;
export declare function readOnly<T extends object, K extends Array<keyof T>>(obj: T, keys?: K): T;
export declare function writeOnly<T extends object, K extends Array<keyof T>>(obj: T, keys?: K): T;
export {};
//# sourceMappingURL=index.d.ts.map