export type GetKeysOptions = { omit: keyof A; } | { pick: keyof A; }; export type GetKeys> = 'omit' extends keyof K ? Exclude : 'pick' extends keyof K ? Extract : never; export type ExcludeTypesOptions = { baseTypes?: boolean; } & GetKeysOptions; export type UndefinedToNever = T extends undefined ? never : T; /** Used in `LiftInvalid`. */ export type Invalid = Error & { __errorMessage: T; }; /** Used in `AsUniqueArray`. */ export type LiftInvalid = IfExtends, Extract>, A>; /** Used in `NonUnion`. */ export type UnionToIntersection = (U extends U ? (k: U) => void : never) extends (k: infer I) => void ? I : never; /** Used in `UnionToTuple`. */ export type LastOfUnion = UnionToIntersection T : never> extends () => infer R ? R : never; export type IsType = Strict extends true ? IfExtends : T extends Type ? true : false; export type Enumerate = Acc['length'] extends N ? Acc[number] : Enumerate;