export type Equal = (() => U extends Left ? 1 : 0) extends < U >() => U extends Right ? 1 : 0 ? true : false export type Same = Left extends Right ? Right extends Left ? true : false : false // https://stackoverflow.com/questions/49927523/disallow-call-with-any/49928360#49928360 export type IfNotAny = 0 extends 1 & T ? never : T export type IfNotUndefined = Exclude extends never ? never : T export type IsNotAnyOrUndefined = IfNotUndefined> extends never ? false : true export type UnionToIntersection = ( // eslint-disable-next-line @typescript-eslint/no-explicit-any U extends any ? (k: U) => void : never ) extends (k: infer I) => void ? I : never export type IfNotUnion = UnionToIntersection< MaybeUnion > extends never ? void : Equal> extends true ? MaybeUnion : void export type EntityOrArrayToUnion = T extends infer S | Array ? S : never export type IfNotString = string extends T ? never : T