https://blog.mamansoft.net/2018/07/23/typescript-multifunctional-enum/
[[TypeScript]]で[[Java]]のような多機能Enumを実装する方法の1つ。
```ts
class Color {
private static readonly _values: Color[] = []
static readonly RED = new Color("red", "赤")
static readonly BLUE = new Color("blue", "青")
static readonly GREEN = new Color("green", "緑")
static readonly WHITE = new Color("white", "白")
static readonly BLACK = new Color("black", "黒")
private constructor(
readonly name: string,
readonly japanese: string,
) {
Color._values.push(this)
}
static fromJapanese(value: string): Color | undefined {
return Color._values.find(x => x.japanese === value)
}
static values(): Color[] {
return Color._values
}
}
```
`fromXXX`は`find`を使うため、探索回数が多くなるとパフォーマンスが劣化する。その場合はあらかじめindexingするか、`fromXXX`を[[Memoize]]するのがよい。ただ、列挙子の数がよほど多くなければボトルネックにはならないと思う。