TS:枚举的拓展

TS:枚举的拓展

1. 枚举的计算

  • 枚举成员可以使用常量枚举表达式进行初始化:

    enum E {
          
          
        None ,
        OK = 1 << 1,
        Read = 1 << 2,
        Write = 2 << 1,
        ReadWrite = Read | Write,
        Pending = "123".length
    }
    

2.枚举成员的类型

  • 枚举成员被枚举后,就带有了一种特殊的语义;

  • 枚举成员成为了类型:

    enum E {
          
           A , B }
    interface A {
          
          
        type : E.A;
        value : number
    }
    
    let c : A {
          
          
        type : E.B,	//error , A接口的type属性的类型为E.A
        value : 1
    }
    
  • 枚举是在运行时真正存在的对象:

    enum E {
          
           X , Y}
    function foo(obj : {
          
          X : number}){
          
          
        return obj,X;
    }
    
    foo(E);		//ok,E是一个真实存在的对象,X他的一个属性,值为0。
    

4. 枚举的反向映射

  • 枚举除了可以从枚举名字获得枚举值外,还可以从枚举值获取到枚举名字。

    enum E {
          
          X , Y}
    console.log(E[0])	// "X"
    

5. 常量枚举

  • 为了避免在额外生成的代码上的开销 和 额外的非直接对枚举成员的访问,可以使用const进行枚举。

    const enum E{
          
          
        A = 1,
        B = 2 * A
    }
    
  • 常量枚举只能使用常量枚举表达式;

  • 常量枚举会在编译阶段被删除,取而代之的是枚举的值;

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

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

猜你喜欢

转载自blog.csdn.net/yivisir/article/details/109560532
ts
今日推荐