Comment les différents enum variantes travail à la Machine?

Tapuscrit a un tas de façons différentes de définir un enum:

enum Alpha { X, Y, Z }
const enum Beta { X, Y, Z }
declare enum Gamma { X, Y, Z }
declare const enum Delta { X, Y, Z }

Si j'essaie d'utiliser une valeur de Gamma au moment de l'exécution, j'obtiens une erreur parce que Gamma n'est pas défini, mais ce n'est pas le cas pour Delta ou Alpha? Ce n' const ou declare sur les déclarations ici?

Il y a aussi un preserveConstEnums compilateur drapeau -- comment cette interagir avec ces?