export type CleanIntellisense = {} & { [K in keyof T]: T[K]; }; export type RequiredKeys = { [K in keyof T]-?: {} extends Pick ? never : K; }[keyof T]; export type OptionalKeys = { [K in keyof T]-?: {} extends Pick ? K : never; }[keyof T]; export type IfHasKeys = keyof T extends never ? TFalse : TTrue; export type Modify = Pick> & R; export type UnionToIntersection = (U extends U ? (x: U) => void : never) extends ((x: infer T) => void) ? T : never; type AllKeys = keyof UnionToIntersection; type GuaranteedKeys = Exclude>; export type UnionToSpecialIntersection = CleanIntellisense<{ [K in GuaranteedKeys]: T[K]; } & { [K in Exclude, GuaranteedKeys>]?: UnionToIntersection[K]; }>; export type DeepRequired = { [P in keyof T]-?: DeepRequired; }; export {};