import { EnumValidKeys, EnumInstanceType } from "./type";
export default abstract class Enum {
    private readonly value;
    /**
     * @param value - Enum의 내부 값 (null 또는 undefined는 허용되지 않음)
     * @throws {InvalidEnumValue} - 값이 null 또는 undefined일 경우 예외 발생
     */
    protected constructor(value: string);
    /**
     * 특정 Enum 클래스의 모든 인스턴스를 가져오는 정적 메서드
     * @returns {Record<string, EnumInstanceType<T>>} - Enum 클래스의 모든 static 필드(인스턴스)를 객체로 반환
     */
    private static getEnums;
    /**
     * Enum 클래스의 모든 인스턴스를 배열로 반환
     * @returns {EnumInstanceType<T>[]} - 특정 Enum 클래스의 모든 값들을 배열로 반환
     */
    static values<T extends typeof Enum>(this: T): EnumInstanceType<T>[];
    /**
     * 특정 값에 해당하는 Enum 인스턴스를 반환
     * @param value - 찾을 Enum의 내부 값
     * @returns {EnumInstanceType<T> | undefined} - 해당하는 Enum 인스턴스
     */
    static valueOf<T extends typeof Enum>(this: T, value: EnumValidKeys<T>): EnumInstanceType<T> | undefined;
    /**
     * Enum 값이 특정 문자열(value) 또는 다른 Enum 인스턴스와 동일한지 확인
     * @param e - 비교할 대상 (Enum 인스턴스 또는 문자열)
     * @returns {boolean} - 동일한 값이면 true, 그렇지 않으면 false
     */
    equals(e: Enum | string): boolean;
    /**
     * 엄격 비교 메서드 (다른 Enum과의 값 비교)
     * @param e - 비교할 Enum 인스턴스
     * @returns {boolean} - 값이 동일하면 true, 아니면 false
     * @description `equals()`와 달리 문자열과 비교하지 않고, Enum 인스턴스만 비교할 수 있음
     */
    strictEquals(e: Enum): boolean;
    /**
     * Enum 값을 문자열로 변환
     * @returns {string} - Enum의 내부 값 반환
     */
    toString(): string;
}
