/** * Type to make properties optional and preserve their type */ export type Optional = Pick, K> & Omit; export type Assign = Omit & U; export type EmitFn = (event: K, ...args: T[K] extends any[] ? T[K] : never) => void; type BooleanKey = { [K in keyof T]: boolean extends NonNullable ? K : never; }[keyof T]; export type BooleanDefaults = { [K in BooleanKey]: undefined; }; export type MaybePromise = T | Promise; export {};