こんにちは。きんくまです。
※2013/08/10修正
コメントいただきました!
以下の情報は先日公開されたTypescript 0.9.1で直ってました。
どうやら0.9.0だけのようです!
以下もと記事です
———————————
今回はTypeScriptのenumの挙動についてです。
C言語の場合
C言語だと(ひょっとしたらコンパイラに依存するかも。今回はLLVM)
enum Color{ Red, Green, Purple, Blue, Yellow };
と書いたときは、
Red -> 0
Green -> 1,
Purple -> 2,
Blue -> 3,
Yellow -> 4
となって、0スタートではじまって、1ずつインクリメントされます。
enum Color{ Red, Green, Purple = 8, Blue, Yellow };
上のように途中で値を設定すると
Red -> 0
Green -> 1,
Purple -> 8,
Blue -> 9,
Yellow -> 10
そこで値がリセットされてそこからまた1ずつインクリメントされていきます。
で、この挙動に慣れていたので、TypeScriptのenumがちょっと違ってたのでその話です。
TypeScriptのenum
export enum Color{ Red, Green, Purple, Blue, Yellow }
0.9.0のコンパイラだと
Color.Red -> 0
Color.Green -> 1,
Color.Purple -> 2,
Color.Blue -> 3,
Color.Yellow -> 4
これはCと同じです。
export enum Color{ Red, Green, Purple = 8, Blue, Yellow }
これが違っていて、
Color.Red -> 0
Color.Green -> 1,
Color.Purple -> 8,
Color.Blue -> 0,
Color.Yellow -> 1
値指定したあと、その数値を基準にインクリメントされずに、また0に戻る仕様になってました。
うーん、ちとメンドい仕様かも。