TS: Extensión de enumeración
1. Cálculo de enumeración
-
Los miembros de la enumeración se pueden inicializar mediante expresiones de enumeración constante :
enum E { None , OK = 1 << 1, Read = 1 << 2, Write = 2 << 1, ReadWrite = Read | Write, Pending = "123".length }
2. Tipo de miembro de enumeración
-
Una vez enumerados los miembros de la enumeración, tienen una semántica especial;
-
Los miembros de la enumeración se convierten en tipos:
enum E { A , B } interface A { type : E.A; value : number } let c : A { type : E.B, //error , A接口的type属性的类型为E.A value : 1 }
-
Las enumeraciones son objetos que realmente existen en tiempo de ejecución:
enum E { X , Y} function foo(obj : { X : number}){ return obj,X; } foo(E); //ok,E是一个真实存在的对象,X他的一个属性,值为0。
4. Mapeo inverso de la enumeración
-
Además del valor de enumeración obtenido del nombre de enumeración, la enumeración también puede obtener el nombre de enumeración del valor de enumeración.
enum E { X , Y} console.log(E[0]) // "X"
5. Enumeración constante
-
Para evitar la sobrecarga del código generado adicional y el acceso indirecto adicional a los miembros de la enumeración, se puede utilizar la
const
enumeración.const enum E{ A = 1, B = 2 * A }
-
La enumeración constante solo puede utilizar expresiones de enumeración constante;
-
La enumeración constante se eliminará durante la fase de compilación y se reemplazará por el valor de la enumeración;
-
Enumeración externa: la enumeración externa se utiliza para describir la forma de un tipo de enumeración existente.
- Existe una diferencia importante entre la enumeración externa y la enumeración no externa: en la enumeración normal, los miembros sin métodos de inicialización se tratan como miembros constantes.
- Para enumeraciones externas no constantes, cuando no existe un método de inicialización, se considera calculado.
declare enum E{ A = 1, B , C = 3 }