export declare const tuple: (...args: T) => T; export declare type Serializable = null | undefined | Stringifiable | SerializableList; export interface Stringifiable { toString(): string; } export interface SerializableList extends Array { } export declare const tupleNum: (...args: T) => T; export declare const tupleEnum: (...values: T) => { readonly [K in T[number]]: K; }; export declare type ObjectKey = T extends Record ? T[keyof T] : never; export declare type IsAny = 0 extends 1 & T ? true : false; export declare type IsNever = [T] extends [never] ? true : false; export declare type IsNullable = Extract extends never ? false : true; export declare type IsOptional = Extract extends never ? false : true; export declare type IsUnknown = IsNever extends false ? T extends unknown ? unknown extends T ? IsAny extends false ? true : false : false : false : false; export declare type OnlyKnown = IsAny extends true ? never : IsNever extends true ? never : IsUnknown extends true ? never : T; export declare type MaybePromise = T | Promise; export declare type PromiseType

= P extends Promise ? T : never; export declare type MaybeArray = T | T[]; export declare type ArrayType = T extends Array ? N : T; export declare type AnyRecord = Record; export declare type IfExtends = Param extends Type ? IfTrue : IfFalse; export declare type ObjectUnion = { [K in keyof (A & B)]: (A & B)[K]; }; export declare type Entries = { [K in Extract]-?: [K, T[K]]; }[Extract][]; export declare type AnyFunction = (...args: any[]) => any; export declare type Writeable = { -readonly [P in keyof T]: T[P]; }; export declare type ForceString = T extends string ? T : never; export declare type NotString = string extends T ? never : T; export declare type NullableToPartial = UnionToIntersection<{ [K in keyof T as IsOptional extends true ? never : K]-?: T[K]; } | { [K in keyof T as IsOptional extends true ? K : never]?: T[K]; }>; export declare type Join = { [K in keyof ({ [K in keyof L]: L[K]; } & { [K in keyof R]: R[K]; })]: ({ [K in keyof L]: L[K]; } & { [K in keyof R]: R[K]; })[K]; }; export declare type Merge = Omit extends infer P ? Join : never; export declare type ExtendList = Extends extends [] ? Dest : Extends extends [infer Item, ...infer Rest] ? ExtendList, Rest> : never; export declare type UnionToIntersection = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? { [K in keyof R]: R[K]; } : never; export declare type Simplify = { [KeyType in keyof T]: T[KeyType]; }; export declare type ArrayKeys = T extends any[] | ReadonlyArray ? T extends [any, ...infer Tail] ? ArrayKeys | Tail['length'] : never : never; export declare type DeepArrayKeys = { [K in keyof T]: `${Extract}.${ObjectDotNotations}`; }[number]; export declare type ObjectDotNotations = Level['length'] extends Limit ? never : Obj extends { [K: string]: any; } ? { [K in keyof Obj]: K extends string ? Obj[K] extends { [K: string]: any; } ? Obj[K] extends any[] ? K | `${K}.${ArrayKeys}` | `${K}.${DeepArrayKeys}` : K | `${K}.${ObjectDotNotations}` : K : never; }[keyof Obj] : never; export declare type TypeLike = [0]> = T extends { [K: string]: any; } ? { [K in keyof T]: T[K] extends { [K: string]: any; } ? Level['length'] extends 2 ? any : T[K] extends AnyFunction ? AnyFunction : TypeLike : any; } : any;