There are four different aspects to enums in TypeScript you need to be aware of. First, some definitions: "lookup object" If you write this enum: enum Foo { X, Y } TypeScript will emit the following object: var Foo; (function (Foo) { Foo[Foo["X"] = 0] = "X"; Foo[Foo["Y"] = 1] = "Y"; })(Foo || (Foo = {})); I'll refer to this as the lookup object. Its purpose is twofold: to serve as a mapping from s