Home 타입스크립트 Enum에 정적 메소드 추가하기?
포스트
취소

타입스크립트 Enum에 정적 메소드 추가하기?

  • 결론부터 말하면 타입스크립트 문법상 Enum은 정적 메소드를 추가할 수 없습니다
    • ps. 여담이지만 타입스크립트에서 Enum을 사용을 추천하지 않는 개발자들도 꽤 있습니다… 사람마다 다릅니다.
    • 참고 : https://engineering.linecorp.com/ko/blog/typescript-enum-tree-shaking/
  • 하지만 타입스크립트 문법중 하나인 namespace를 사용하면 어느정도 가능하게 됩니다.
  • 타입스크립트는 코드를 캡슐화 할 수 있는 또 다른 수단인 namespace 키워드를 제공하는데 이것을 사용하면 된다.
    • 잠시 네임스페이스에 대해 간단히 설명하자면…
      • 네임스페이스는 파일시스템에서 파일이 어떻게 구성되어있는지 같은 자질구레한 세부사항을 추상화 한다.
      • 예를들면 .mine 함수가 schemes/scams/bitcoin/apps 에 위치한다는 사실을 알 필요 없이 Schemes.Scams.Bitcoin.app.mine 같은 짧고 같편한 네임스페이스로 접근할 수 있게 해준다.
      • 다만 절대로 네임스페이스를 코드 캡슐화의 수단으로는 사용하지 않는게 좋다!
  • namespace 사용예시 ```tsx // get.ts namespace Network { export const get = (url: string): Promise => { return } }

// app.ts namespace App { Network.get('https://jongin.com') }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- `namespace` 분리
```tsx
namespace Network {
    export namespace HTTP {
        export const get = <T>(url: string): Promise<T> => {
            return
        }
        export const post = <T>(url: string): Promise<T> => {
            return
        }
    }
    export namespace TCP {
        export const listenOn = (port: number) {

        }
    }
    export namespace UDP {
        ...
    }
}
  • 열거형에 정적 메소드 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
enum Color {
    red = 1,
    green = 2,
    blue = 4
}

namespace Color {
    export function mixColor(colorName: string) {
        if (colorName == "yellow") {
            return Color.red + Color.green;
        }
        else if (colorName == "white") {
            return Color.red + Color.green + Color.blue;
        }
        else if (colorName == "magenta") {
            return Color.red + Color.blue;
        }
        else if (colorName == "cyan") {
            return Color.green + Color.blue;
        }
    }
}

Color.mixColor('yellow')

export { Color };
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

fluentd로 용도에 맞게 어플리케이션 로그 수집하기

gRPC 서버에서 ThreadLocal을 올바르게 사용하는 방법 (gRPC Context, gRPC + JPA AuditorAware)

Comments powered by Disqus.