import type { IdentityType } from "./schemas";
/**
 * @ignore
 * Extract enum values out of a enum object.
 */
export declare type EnumValues<E> = E extends Record<infer _K, // eslint-disable-line @typescript-eslint/no-unused-vars
infer V> ? V : never;
/**
 * An enum type, based on a Typescript alike enum object.
 * Syntactic sugar for `types.or(...enum_values.map(types.literal))`
 *
 * Example:
 * ```ts
 * enum Color {
 *   Red = "red",
 *   Green = "green"
 * }
 *
 * const colorType = types.enum(Color)
 * ```
 *
 * @template E Enum type.
 * @param enumObject
 * @returns
 */
export declare function typesEnum<E extends object>(enumObject: E): IdentityType<EnumValues<E>>;
/**
 * An enum type, based on a Typescript alike enum object.
 * Syntactic sugar for `types.or(...enum_values.map(types.literal))`
 *
 * Example:
 * ```ts
 * enum Color {
 *   Red = "red",
 *   Green = "green"
 * }
 *
 * const colorType = types.enum(Color)
 * ```
 *
 * @template E Enum type.
 * @param enumObject
 * @returns
 */
export declare function typesEnum<E = never>(enumObject: object): IdentityType<E>;
