TS学习笔记(六):枚举

作者: 半掩时光 | 来源:发表于2019-05-11 23:33 被阅读0次

    枚举是组织收集有关联变量的一种方式,使用枚举我们可以定义一些带名字的常量,像 C# 和 Java 都有枚举数据类型,TypeScript 将枚举类型引进到了 JavaScript 中。

    数字枚举

    枚举类型的值是数字类型,因此它们被称为数字类型枚举,成员的值可以不用初始化,因为具有自增行为。

    // 默认自增
    enum Person {
      name,
      age,
      love,
      hobby
    }
    console.log(Person.name); // 0
    console.log(Person.hobby); // 3
    
    // 可人为自行修改
    enum Person {
      name = 4,
      age = 3,
      love = 2,
      hobby = 1
    }
    console.log(Person.name); // 4
    console.log(Person.hobby); // 1
    

    数字枚举的反向映射

    数字枚举成员还具有 反向映射 的特性,从枚举值到枚举名字,要注意的是 不会为字符串枚举成员生成反向映射。

    enum Person {
      name,
      age,
      love,
      hobby
    }
    console.log(Person[Person.love]); // love
    
    

    字符串枚举

    在一个字符串枚举里,每个成员都必须用字符串字面量,或另外一个字符串枚举成员进行初始化。

    enum Person {
      name = 'NAME',
      age = 'AGE',
      love = 'LOVE',
      hobby = 'HOBBY'
    }
    console.log(Person.name); // NAME
    console.log(Person.hobby); // HOBBY
    
    

    异构枚举

    枚举可以混合字符串和数字成员,但一般没必要这么做。

    enum Person {
      name = 1,
      age = 2,
      love = 'LOVE',
      hobby = 'HOBBY'
    }
    console.log(Person.name); // 1
    console.log(Person.hobby); // HOBBY
    
    

    常量枚举

    常量枚举通过在枚举上使用 const 修饰符来定义,常量枚举不同于常规的枚举,他们会在编译阶段被删除。

    const enum Size {
      WIDTH = 10,
      HEIGHT = 20
    }
    const area = Size.WIDTH * Size.HEIGHT; // 200
    

    常量枚举成员在使用的地方会被内联进来,之所以可以这么做是因为,常量枚举不允许包含计算成员;如上例所示,在运行时是没有 Size 变量的,因此常量枚举会带来一个对性能的提升。

    other

    相关文章

      网友评论

        本文标题:TS学习笔记(六):枚举

        本文链接:https://www.haomeiwen.com/subject/ezqqaqtx.html