끄적끄적

[타입스크립트] Enum 클래스로 사용해보기 본문

Front-end/Typescript

[타입스크립트] Enum 클래스로 사용해보기

mashko 2021. 11. 18. 14:55
반응형

타입스크립트의 이넘을 쓰다보면 불편한점 중 하나가 이넘이다..
아직까지 내가 자바처럼 이넘을 쓸 줄 모르는건지 모르지만.. 불편한점이 있어 튜닝하기 시작했다.
일단 자바에서의 이넘은 이렇다.

@Getter
@AllArgsConstructor
enum ExampleEnum implements BaseEnum {
    EXAMPLE_1("1", "2", "3"),
    EXAMPLE_2("1", "2", "3"),
    EXAMPLE_3("1", "2", "3");

    private String code;
    private String name;
    private String desc;
}

대충 이렇다.. 여러값을 가질 수 있고 좀 더 유연하달까?
그런데 타입스크립트의 이넘은 굉장히 단순하고 뭔가 반쪽의 반의 반쪽 짜리같은 느낌..?
많이 불편하다. 그래서 따로 만들어서 써볼까 생각해봤다.

enum ExampleEnum {
    EXAMPLE_1 = '1',
    EXAMPLE_2 = '2'
}

일단 머리를 좀 굴리다가 이리저리 시도해보다가 클래스로 만들어보면 어떨까해서 만들기 시작했다.
클래스로 만들면 생성자나 기타 이넘의 밸류값을 추출할수 있거나 매핑을 해줄수 있는 메소드도 만들 수 있겠다 싶었다.
또 다른 삽질의 시작.

export default class EnumMake<T, L, N> {
    public readonly code: T;
    public readonly label: L;
    public readonly name?: N;

    constructor(code: T, label: L, name?: N) {
        this.code = code;
        this.label = label;
        this.name = name;
    }
}
export default class ExampleEnum {
    public static YES = new EnumMake<boolean, string, string>(true, 'Y', '사용승인');
    public static NO = new EnumMake<boolean, string, string>(false, 'N', '사용미승인');

    static indicators = [
        ExampleEnum.YES,
        ExampleEnum.NO
    ];

    static of = (code: boolean) => ExampleEnum.indicators.find(indicator => indicator.code === code);
}

의식의 흐름대로 만들어 본 초기 코드이다.
일단 어... 일단 잘되는거같은데..

일단 기존 이넘보단.. 훨씬 좋다..

반응형
Comments