Me preguntaba cómo mecanografiado compilaría una enumeración en un código javascript. Así que implementé el siguiente ejemplo:
enum Contagens { UM, DOIS, TRES }Y fue compilado en esto:
"use strict"; var Contagens; (function (Contagens) { Contagens[Contagens["UM"] = 0] = "UM"; Contagens[Contagens["DOIS"] = 1] = "DOIS"; Contagens[Contagens["TRES"] = 2] = "TRES"; })(Contagens || (Contagens = {}));Pero, no entiendo cómo funciona... ¿alguien podría explicarme este código?
La variable var Contagens; Esto crea la variable que contendrá una referencia a la enumeración.
El argumento Contagens || (Contagens = {}) la enumeración se usa si ya existe, y se establecerá en un objeto vacío, si no existe. Esto permite que las enumeraciones se extiendan:
enum Contagens { UM, DOIS, TRES } enum Contagens { CATRE = 4 } La función function (Contagens) { toma un argumento Contagens que es el valor del paso #2. En esta función, creará las entradas en el objeto enumerado. Tiene el mismo nombre que la variable exterior Contagens , por lo que sombrea esa variable. Pero es el mismo valor, así que eso no importa mucho.
La asignación.
Contagens[Contagens["UM"] = 0] = "UM"; El resultado de una asignación es el valor que se asigna.* Entonces Contagens["UM"] = 0 hace dos cosas. Establece la clave "UM" en el valor 0 y devuelve 0 .
Ese 0 devuelto se usa luego en una segunda asignación:
Contagens[0] = "UM"; Ahora a la propiedad "UM" se le ha asignado 0 y la propiedad 0 se ha asignado a "UM" . La enumeración ahora se ve así:
{ UM: 0, "0": "UM" }Esto le permite buscar un valor en una enumeración por su nombre u obtener su nombre de su valor.
Contagens.UM // 0 Contagens[0] // "UM"¡Qué es útil!
* El resultado de una asignación al declarar una variable no está undefined , pero asignar una propiedad de un objeto o asignar a una variable existente devolverá el valor asignado. JS es así de peculiar.