Typescript ドキュメントの Enum のページ の概要を日本語でまとめる。
enum の定義
typescript での enum は下のように定義できる。値を省略したり、文字列にしたりもできるがそれらは元記事参照。
enum Direction {
UP = 1,
RIGHT = 2,
DOWN = 3,
LEFT = 4
}
enum の値を参照・代入する
Direction という enum 型を定義しているときは下のような感じで使う。
const userDirection : Direction = Direction.UP;
console.log(userDirection); // 1 を出力
value から key を取り出す
ドキュメントの #reverse mappings に書いてある
const directionString : string = Direction[1];
console.log(directionString); // "UP" を出力
すべての key を取り出す
Typescript ではそのような機能をサポートしていない。今の所自分でなんとかするしかなさそう。
// 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 に書いてある。export がない場合はサンプル通りで良いのだが export がある場合は、見慣れない書き方になる。たとえば下のような感じ。
enum Direction { ... } // 略
namespace Direction {
export function helper(){ ... } //略
}
export {Direction}
また、これは eslint の no-namespace でエラーになってしまうという問題もある。しかたがないので Enum にヘルパーメソッドを追加するのは諦めたほうがよいかもしれない。
あたりが次善策という感じ。