export type Primitive = string | number | boolean | bigint | symbol | undefined | null; export type Builtin = Primitive | Function | Date | Error | RegExp; export type DeepRequired = T extends Error ? Required : T extends Builtin ? T : T extends Map ? Map, DeepRequired> : T extends ReadonlyMap ? ReadonlyMap, DeepRequired> : T extends WeakMap ? WeakMap, DeepRequired> : T extends Set ? Set> : T extends ReadonlySet ? ReadonlySet> : T extends WeakSet ? WeakSet> : T extends Promise ? Promise> : T extends {} ? { [K in keyof T]-?: DeepRequired; } : Required; export type DeepPartial = { [P in keyof T]?: DeepPartial; }; export type IPadding = [ top: number, right: number, bottom: number, left: number ];