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);
}
의식의 흐름대로 만들어 본 초기 코드이다.
일단 어... 일단 잘되는거같은데..




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