1. eggc

    No comment

    eggc
Changes in body
Source | HTML | Preview
@@ -1,68 +1,70 @@
[Typescript ドキュメントの Enum のページ](https://www.typescriptlang.org/docs/handbook/enums.html) の概要を日本語でまとめる。
# enum の定義
typescript での enum は下のように定義できる。値を省略したり、文字列にしたりもできるがそれらは元記事参照。
```ts
enum Direction {
UP = 1,
RIGHT = 2,
DOWN = 3,
LEFT = 4
}
```
# enum の値を参照・代入する
Direction という enum 型を定義しているときは下のような感じで使う。
```ts
const userDirection : Direction = Direction.UP;
console.log(userDirection); // 1 を出力
```
# value から key を取り出す
ドキュメントの [#reverse mappings](https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings) に書いてある
```ts
const directionString : string = Direction[1];
console.log(directionString); // "UP" を出力
```
# すべての key を取り出す
[Typescript ではそのような機能をサポートしていない](https://github.com/Microsoft/TypeScript/issues/17198)。今の所自分でなんとかするしかなさそう。
```ts
// key と value が混ざっている
const list: string[] = Object.keys(Direction);
// key のみ
const keys: string[] = list.filter((k: any) => typeof Direction[k] === "number");
// value のみ
const values = keys.map((k: any) => Direction[k]); // なぜか型指定できない…。
```
# ヘルパーメソッドを追加する
[#Enum with static functions](https://typescript-jp.gitbook.io/deep-dive/type-system/enums#wotsuenum-with-static-functions) に書いてある。export がない場合はサンプル通りで良いのだが export がある場合は、見慣れない書き方になる。
```ts
enum Direction { ... } // 略
namespace Direction {
export function helper(){ ... } //略
}
export {Direction}
```
さらに namespace は eslint でエラーになってしまう。これを書き換える表現は今のところ見つからない。
-ヘルパーメソッドを追加するのは諦めて [Stackoverflow](https://stackoverflow.com/a/28151986) で紹介されていた Unitlity class を作る方針でもよいかもしれない。
-[Enum 自体をやめて一つの Class にする](https://qiita.com/keito1024/items/b7e55c8d6db433678282) という選択も一応ありかもしれない。
+- [ヘルパーメソッドを追加するのは諦めてUnitlity class を作る](https://stackoverflow.com/a/28151986)
+- [Enum 自体をやめて一つの Class にする](https://qiita.com/keito1024/items/b7e55c8d6db433678282)
+
+あたりが次善策という感じ。