//#region UU types /** Represents any value that is either a string itself or can be converted to one (implicitly and explicitly) because it has a toString() method */ export type Stringifiable = string | { toString(): string } | { [Symbol.toStringTag]: string } | number | boolean | null | undefined; /** * A type that offers autocomplete for the passed union but also allows any arbitrary value of the same type to be passed. * Supports unions of strings, numbers and objects. */ export type LooseUnion = (TUnion) | ( TUnion extends string ? (string & {}) : ( TUnion extends number ? (number & {}) : ( // eslint-disable-next-line @typescript-eslint/no-explicit-any TUnion extends Record ? (object & {}) : never ) ) ); /** * A type that allows all strings except for empty ones * @example * function foo(bar: NonEmptyString) { * console.log(bar); * } */ export type NonEmptyString = TString extends "" ? never : TString; /** * Makes the structure of a type more readable by expanding it. * This can be useful for debugging or for improving the readability of complex types. */ export type Prettify = { [K in keyof T]: T[K]; } & {};