type Awaitable = T | PromiseLike; type Nullable = T | null | undefined; type Arrayable = T | Array; type ArgumentsType = T extends (...args: infer U) => any ? U : never; type MergeInsertions = T extends object ? { [K in keyof T]: MergeInsertions; } : T; type DeepMerge = MergeInsertions<{ [K in keyof F | keyof S]: K extends keyof S & keyof F ? DeepMerge : K extends keyof S ? S[K] : K extends keyof F ? F[K] : never; }>; type MutableArray = { -readonly [k in keyof T]: T[k]; }; interface Constructable { new (...args: any[]): any; } interface ParsedStack { method: string; file: string; line: number; column: number; } interface ErrorWithDiff extends Error { name: string; nameStr?: string; stack?: string; stackStr?: string; stacks?: ParsedStack[]; showDiff?: boolean; actual?: any; expected?: any; operator?: string; type?: string; frame?: string; diff?: string; codeFrame?: string; } export type { ArgumentsType, Arrayable, Awaitable, Constructable, DeepMerge, ErrorWithDiff, MergeInsertions, MutableArray, Nullable, ParsedStack };