Enumeração como um tipo em TypeScript

Cada enumeração cria seu próprio tipo de dados. Vamos, por exemplo, para uma variável que armazena a estação atual atribuir o tipo Season:

typescriptlet current: Season;

Vamos atribuir à nossa variável o número da estação:

typescriptlet current: Season = Season.Winter;
console.log(current); // 0

É possível especificar o número da estação manualmente:

typescriptlet current: Season = 3;

Mas se tentarmos atribuir dados de outro tipo, por exemplo, uma string, haverá um erro:

typescriptlet current: Season = 'str'; // haverá um erro

Infelizmente, o intervalo de valores não é rastreado e é possível atribuir um número que não está presente em nossa enumeração:

typescriptlet current: Season = 7; // não haverá erro

Ao verificar com o operador typeof nossa variável retornará o tipo numérico:

typescriptlet current: Season = 3;
console.log(typeof current); // "number"

Resumindo, pode-se dizer que esse tipo não é verificado de forma muito rigorosa e, por isso, seu valor é questionável.