declare namespace helperUtil { export type BasePrimitive = string | number | boolean; export type Primitive = BasePrimitive | BasePrimitive[]; export type isUndefined = undefined extends T ? (T extends undefined ? true : false) : false; export type isNull = null extends T ? (T extends null ? true : false) : false; export type isTrue = true extends T ? (T extends true ? true : false) : false; export type isFalse = false extends T ? (T extends false ? true : false) : false; export type isObject = T extends { [k: string]: any; } ? (T extends Array ? false : true) : false; export type isObjectArray = T extends Array<{ [k: string]: any; }> ? true : false; export type isEqual = U extends T ? (T extends U ? true : false) : false; export type stripNull = T extends null ? never : T; export type stripUndefined = T extends undefined ? never : T; export type flattenArray = T extends (infer U)[] ? (any[] extends T ? U : T) : T; export type require = stripNull>; export type clean = flattenArray>>; export type cleanObject = flattenArray>>; export type variants = T | T[] | undefined | null; export type isOptional = undefined extends T ? true : false; export type isNullable = null extends T ? true : false; export type isArray = any[] extends T ? true : false; export type identity = T; export type neverKeys = { [k in keyof T]: T[k] extends never ? k : never; }[keyof T]; export type Omit = Pick>; export type noNever = Omit>; export type flatten = identity<{ [k in keyof noNever]: T[k]; }>; export type format = identity<{ [k in keyof T]: T[k]; }>; export interface Json { [key: string]: BasePrimitive | BasePrimitive[] | undefined | null | Json | Json[]; } export type typeToTuples = T extends boolean ? [boolean | null | undefined] | [boolean[] | null | undefined] : [T | null | undefined] | [T[] | null | undefined]; export type nullableCheck = D['nullable'] extends true ? T | null : T; export type optionalCheck = D['optional'] extends true ? T | undefined : T; export type arrayCheck = D['array'] extends true ? T[] : T; export type declean = optionalCheck, D>, D>; export type copyNullable = null extends Y ? T | null : T; export type copyOptional = undefined extends Y ? T | undefined : T; export type copyArray = any[] extends Y ? T[] : T; export type toVariant = copyNullable, OriginalT>, OriginalT>; type boxed = [T]; type nondistributed = [T] extends [infer U] ? boxed : never; type distributed = T extends infer U ? boxed : never; export type isUnion = distributed extends nondistributed ? nondistributed extends distributed ? false : true : true; export type setKey = flatten<{ [k in Exclude]: T[k]; } & { [k in Key]: Value; }>; export type makeOptional = { [k in OptionalKeys]?: T[k]; } & { [k in Exclude]: T[k]; }; export type makeRequired = { [k in RequiredKeys]: T[k]; } & { [k in Exclude]?: T[k]; }; export type getRequiredKeys = NonNullable<{ [k in keyof Shape]: undefined extends Shape[k] ? never : k; }[keyof Shape]>; export type getOptionalKeys = Exclude>; export type setDefaults = flatten<{ [k in getRequiredKeys]: Shape[k]; } & { [k in Exclude>]: Defaults[k]; }>; export type filterByClass = flatten<{ [k in keyof clean]: clean[k] extends Class ? clean[k] : never; }>; export type merge = { [k in Exclude]: A[k]; } & B; export {}; } export { helperUtil };