//#region src/types/utils.d.ts /** * Makes types mutable */ type Mutable = T extends object ? { -readonly [K in keyof T]: Mutable } : T; /** * Flatten array types to their singular root */ type UnpackList = Item extends any[] ? Item[number] : Item; /** * Merge two object types with never guard */ type Merge, TypeB = NeverToUnknown> = { [K in keyof TypeA | keyof TypeB]: K extends keyof TypeA & keyof TypeB ? TypeA[K] | TypeB[K] : K extends keyof TypeB ? TypeB[K] : K extends keyof TypeA ? TypeA[K] : never }; /** * Fallback never to unknown */ type NeverToUnknown = IfNever; type IfNever = [T] extends [never] ? Y : N; /** * Test for any */ type IfAny = 0 extends 1 & T ? Y : N; type IsAny = IfAny; type IsNullable = T | null extends T ? Y : N; type IsDateTime = T extends "datetime" ? Y : N; type IsNumber = T extends number ? Y : N; type IsString = T extends string ? Y : N; /** * Helpers for working with unions */ type UnionToParm = U extends any ? (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 TupleToUnion = T[number]; /** * Recursively make properties optional */ type NestedPartial = Item extends any[] ? UnpackList extends infer RawItem ? NestedPartial[] : never : Item extends object ? { [Key in keyof Item]?: NestedUnion } : Item; type NestedUnion = TupleToUnion>; type ToTuplePartial = ToTuplePartialRec; type ToTuplePartialRec = SpliceOne extends never ? [NestedPartial>, ...Rslt] : ToTuplePartialRec, [NestedPartial>, ...Rslt]>; /** * Reduces a complex object type to make it readable in IDEs. */ type Prettify = { [K in keyof T]: T[K] } & unknown; //#endregion export { IfAny, IfNever, IsAny, IsDateTime, IsNullable, IsNumber, IsString, Merge, Mutable, NestedPartial, NeverToUnknown, Prettify, ToTuple, TupleToUnion, UnpackList }; //# sourceMappingURL=utils.d.ts.map