export type IntRange = Exclude, Enumerate> | T; export type Enumerate = Acc["length"] extends N ? Acc[number] : Enumerate; export type ExcludeArray = T extends unknown[] ? never : T; export type Arr = Acc["length"] extends N ? Acc : Arr; export type PartialDeepMerge = { [P in keyof T | keyof U]?: P extends keyof T & keyof U ? T[P] extends object ? U[P] extends object ? PartialDeepMerge : T[P] | U[P] : T[P] | U[P] : P extends keyof T ? T[P] : P extends keyof U ? U[P] : never; }; export type Spread = A extends [ infer L, ...infer R ] ? SpreadTwo> : unknown; type SpreadTwo = Id> & Pick>> & Pick, keyof L>> & SpreadProperties & keyof L>>; type Id = T extends infer U ? { [K in keyof U]: U[K]; } : never; type SpreadProperties = { [P in K]: L[P] | Exclude; }; type OptionalPropertyNames = { [K in keyof T]-?: object extends { [P in K]: T[K]; } ? K : never; }[keyof T]; export {};