export type ValueOf = T[keyof T]; export type Expand = T extends infer O ? O : never; export type ExpandDeep = T extends object ? T extends infer O ? { [K in keyof O]: ExpandDeep; } : never : T; type What, Sep extends string = "; ", K extends string = ""> = ExpandDeep<{ [key in keyof T]: key extends string ? {} extends Omit ? `${K}${key}: ${T[key]}` : What, Sep, `${K}${key}: ${T[key]}${Sep}`> : never; }>; type UnionToParm = U extends unknown ? (k: U) => void : never; type UnionToSect = UnionToParm extends (k: infer I) => void ? I : never; type ExtractParm = F extends { (a: infer A): void; } ? A : never; type SpliceOne = Exclude>; type ExtractOne = ExtractParm>>; type ToTuple = ToTupleRec; type ToTupleRec = SpliceOne extends never ? [ExtractOne, ...Rslt] : ToTupleRec, [ExtractOne, ...Rslt]>; type FindWhat = ToTuple>[0]; export type ObjToString> = FindWhat>; export type Expect = T; export type Equal = (() => T extends X ? 1 : 2) extends () => T extends Y ? 1 : 2 ? true : false; export type FalseIfUndefined = T extends undefined ? false : T; export {};