04-ts-枚举

这是我参与更文挑战的第5天,活动详情查看: 更文挑战web


枚举

使用枚举咱们能够定义一些带名字的常量。 使用枚举能够清晰地表达意图或建立一组有区别的用例。 TypeScript支持数字的和基于字符串的枚举。编程

数字枚举

首先咱们看看数字枚举,若是你使用过其它编程语言应该会很熟悉。markdown

enum Direction {
    Up = 1,
    Down,
    Left,
    Right
}
复制代码

如上,咱们定义了一个数字枚举, Up使用初始化为 1。 其他的成员会从 1开始自动增加。 换句话说, Direction.Up的值为 1, Down为 2, Left为 3, Right为 4。编程语言

咱们还能够彻底不使用初始化器:post

enum Direction {
    Up,
    Down,
    Left,
    Right,
}
复制代码

如今, Up的值为 0, Down的值为 1等等。 当咱们不在意成员的值的时候,这种自增加的行为是颇有用处的,可是要注意每一个枚举成员的值都是不一样的。ui

使用枚举很简单:经过枚举的属性来访问枚举成员,和枚举的名字来访问枚举类型:url

enum Response {
    No = 0,
    Yes = 1,
}

function respond(recipient: string, message: Response): void {
    // ...
}

respond("Princess Caroline", Response.Yes)
复制代码

第一个位置的枚举值不是常量, 后面位置的值就须要指定spa

enum E {
    A = getSomeValue(),
    B, // error! 'A' is not constant-initialized, so 'B' needs an initializer
}

复制代码

字符串枚举

字符串枚举的概念很简单,可是有细微的 运行时的差异。 在一个字符串枚举里,每一个成员都必须用字符串字面量,或另一个字符串枚举成员进行初始化。3d

enum Direction {
    Up = "UP",
    Down = "DOWN",
    Left = "LEFT",
    Right = "RIGHT",
}
复制代码

因为字符串枚举没有自增加的行为,字符串枚举能够很好的序列化。 字符串枚举容许你提供一个运行时有意义的而且可读的值,独立于枚举成员的名字。code

异构枚举

从技术的角度来讲,枚举能够混合字符串和数字成员,可是通常咱们并不会这么作:

enum BooleanLikeHeterogeneousEnum {
    No = 0,
    Yes = "YES",
}

复制代码

计算的和常量成员

每一个枚举成员都带有一个值,它能够是 常量或 计算出来的。 当知足以下条件时,枚举成员被看成是常量:

它是枚举的第一个成员且没有初始化器,这种状况下它被赋予值 0:

// E.X is constant:
enum E { X }
复制代码

它不带有初始化器且它以前的枚举成员是一个 数字常量。 这种状况下,当前枚举成员的值为它上一个枚举成员的值加1。

// All enum members in 'E1' and 'E2' are constant.

enum E1 { X, Y, Z }

enum E2 {
    A = 1, B, C
}
复制代码
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息