Typescript入门__7__枚举

151 阅读2分钟

 1、介绍

枚举是在一定范围内取值,并且这个值必须是枚举类型中的任意一个,并且只能有一个。
使用枚举可以定义一个带名字变量
使用枚举可以清晰地表达意图或创建一组有区别的用例
Typescript支持数字和基于字符串的枚举

2、枚举

1、数字枚举

enum http =  {  
 Continue = 100, 
  Switching =  101, 
  Processing = 102, 
 } 
 enum  button ={   
   open = 1,   
   close = 0  
}
// 要注意每个枚举成员的值都是不同的。


数字枚举可以混入到计算过的和常量成员
但是不带初始化器的枚举或者被放在第一的位置,
或者被放在使用了数字常量或其它常量初始化了的枚举后面是不允许的。

enum button = {    
 open = getButton(),   
  close,  // error 
 }
2、字符串枚举
在字符串枚举里,每个变量成员都必须用字符串字面量,
或另个一个字符串枚举成员进行初始化。

enum  dir = {    
  Up ="UP",  
  Down = "DOWN", 
  Left = "LEFT",  
  Right = "RIGHT",
 }
由于字符串枚举没有自增长的行为,字符串枚举可以很好的序列化。
3、异构枚举
从技术角度来说,枚举可以混合字符串和数字成员

enum sn {  
    No=0,   
   Yes="YES",  
}
4、计算的和常量成员
每个枚举成员都带有一个值,它可以是常量或计算出来的。
a、没有初始化

enum E{   
    x,// 默认为0
   }
b、初始化没有完全

enum E{    
   A = 1,  
     B,  // 2 默认是上一个成员的值+1  
     C,  // 3 默认是上一个成员的值+1 
  }
c、初始化是计算得来的值

enum E{      A = 1++,      B = 2/1,      C = 3*2,  }
5、联合枚举与枚举成员的类型
存在一种特殊的非计算的常量枚举成员的子集:字面量枚举成员。
字面量枚举成员是指不带有初始值的常量枚举成员,或者是指被初始化为
*任何字符串字面量
*任何数字字面量
*应用了一元-符号的数字字面量

enum ShapeKind {  
      Circle,    
    Square,   
 }    
interface Circle {   
     kind: ShapeKind.Circle;   
     radius: number;   
 }   
 interface Square {  
      kind: ShapeKind.Square;   
     sideLength: number;    
}  
  let c: Circle = {    
    kind: ShapeKind.Square,        //    ~~~~~~~~~~~~~~~~ Error!     
    radius: 100,   
 }
6、运行时的枚举
枚举是运行时真正存在的对象。

enum E {X,Y, Z}  
  function f(obj: { X: number }) {  
      return obj.X;  
  }    // Works, since 'E' has a property named 'X' which is a number.    f(E);
7、反向映射

enum Enum {A}
 let a = Enum.A;
let nameOfA = Enum[a]; // "A"

3、外部枚举

外部枚举用来描述已经存在的枚举类型的形状

declare enum Enum {    A = 1,    B,    C = 2}
外部枚举和非外部枚举有一个重要的区别,在正常的的枚举里面,
没有初始化方法的成员被当成常熟成员。
对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的。