import { Maybe, Nullable } from "./Maybe"; export type StrEnumType = { [K in T]: K; }; export type StrEnumHelpers = { values: T[]; length: number; /** synonym for includes */ has(s: Nullable): s is T; includes(s: Nullable): s is T; getCI(s: Nullable): Maybe; pick(...t: O[]): Extract[]; omit(...t: O[]): Exclude[]; indexOf(s: Nullable): Maybe; ordinal(s: Nullable): number; /** synonym for getCI */ toValid(s: Nullable): Maybe; /** @return the first value in arr that getCI returns a non-null value for */ firstValid(...arr: Nullable[]): Maybe; mapValid(s: Nullable, f: (t: T) => R): Maybe; cmp(a: Nullable, b: Nullable): Maybe; lt(a: T, b: T): boolean; next(s: Nullable): Maybe; /** * @return a new StrEnum with the values in reverse order. * * (This follows the new "toReversed" ES2023 naming convention for methods that return a new object) */ toReversed(): StrEnum; }; export type StrEnum = StrEnumType & StrEnumHelpers; export type StrEnumKeys = Type extends StrEnum ? X : never; export declare function strEnum(...o: T[]): StrEnum; export declare const Directions: StrEnum<"North" | "South" | "East" | "West">; export type Direction = StrEnumKeys;