declare type RecordAny = Record; declare type RecordNever = Record; declare type RecordString = Record; declare type RecordAnyOrNever = RecordAny | RecordNever; declare type BaseType = boolean | number | string | undefined | null; declare type ParseType = (value: string) => T; declare type ClassToPlain = { [key in keyof T]: T[key] }; declare type ClassType = { new (...args: any[]): T }; declare type RePartial = { [P in keyof T]: T[P] extends (infer U)[] | undefined ? RePartial[] : T[P] extends object | undefined ? T[P] extends ((...args: any[]) => any) | ClassType | undefined ? T[P] : RePartial : T[P]; }; declare type ReRequired = { [P in keyof T]-?: T[P] extends (infer U)[] | undefined ? ReRequired[] : T[P] extends object | undefined ? T[P] extends ((...args: any[]) => any) | ClassType | undefined ? T[P] : ReRequired : T[P]; }; declare type WrapperType = T;