Typescript学习笔记(二)枚举

野性酷女 2022-04-22 02:06 348阅读 0赞

跟随handbook的脚步,详细介绍一下枚举。

  1. enum Direction {
  2. Up = 1,
  3. Down,
  4. Left,
  5. Right
  6. }

一个枚举类型可以包含零个或多个枚举成员,每个枚举成员可以是一个常数,也可以是计算变量。

如果没有初始化就会被当作常数,这是第一项为0,其余为前一项加一。

如果项具有ts表达式,在编译的时候就会被计算出来。比如

复制代码

  1. enum FileAccess {
  2. // constant members
  3. None,
  4. Read = 1 << 1,
  5. Write = 1 << 2,
  6. ReadWrite = Read | Write
  7. // computed member
  8. G = "123".length
  9. }

复制代码

当然,反向映射是木有问题的。

  1. enum Enum {
  2. A
  3. }
  4. let a = Enum.A;
  5. let nameOfA = Enum[Enum.A]; // "A"

它被编译成:

  1. var Enum;
  2. (function (Enum) {
  3. Enum[Enum["A"] = 0] = "A";
  4. })(Enum || (Enum = {}));
  5. var a = Enum.A;
  6. var nameOfA = Enum[Enum.A]; // "A"

常数枚举

常数枚举是在enum关键字前使用const修饰符

  1. const enum Enum {
  2. A = 1,
  3. B = A * 2
  4. }

你编译出来会看到js什么也没有,是的,它是在编译阶段会被删除,而且它和名字一样只能使用常数表达式。(常数枚举成员在使用的地方被内联进来。 这是因为常数枚举不可能有计算成员)。

  1. const enum Enum {
  2. A = 1*8,
  3. B = A * 2
  4. }
  5. var re=Enum.A;
  6. console.log( re);

你会看到编译出来是

  1. var re = 8 /* A */;
  2. console.log(re);

外部枚举

外部枚举就像这样,用declare关键字定义

  1. declare enum Enum {
  2. A = 1,
  3. B,
  4. C = 2
  5. }

引用中文book的话说:外部枚举和非外部枚举之间有一个重要的区别,在正常的枚举里,没有初始化方法的成员被当成常数成员。 对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的。

复制代码

  1. declare enum Enum {
  2. A = 1,
  3. B,
  4. C = 2
  5. }
  6. var re=Enum.A;
  7. console.log( re);

复制代码

如上的外部枚举,编译出来为

  1. var re = Enum.A;
  2. console.log(re);

发表评论

表情:
评论列表 (有 0 条评论,348人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Typescript学习笔记

    泛型 在像C\和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。 我们需要一种方法使返

    相关 学习笔记

    [2019独角兽企业重金招聘Python工程师标准>>> ][2019_Python_] ![hot3.png][] 枚举Enum > 关键字enum可以将一组具名的值