- 결론부터 말하면 타입스크립트 문법상 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
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 };
Comments powered by Disqus.