枚举(Enum)是一种值类型,它是一组具有命名特性的常量集合。在 TypeScript 中,枚举类型可以让我们更方便地定义一些具有界限性的数据。
枚举的定义
在 TypeScript 中,枚举类型定义可以使用 enum
关键字,如下所示:
enum Direction { Up, Down, Left, Right }
上面的代码定义了一个 Direction
枚举,其中包含了四个成员,分别为 Up
、Down
、Left
和 Right
。它们的值分别为 0
、1
、2
和 3
。
枚举的值
枚举成员的值可以是数字或字符串,但是必须唯一。如果枚举成员没有指定值,则它的值默认为前一个成员的值加 1。例如:
enum Response { Yes = 1, No, Maybe }
在这个枚举中,Yes
的值为 1
,No
的值为 2
,Maybe
的值为 3
。
如果枚举成员的值是字符串,那么其他成员必须是已经定义的字符串枚举成员的子集。例如:
enum Color { Red = "red", Green = "green", Blue = "blue" } let c: Color = Color.Green; // 正确 let d: Color = "yellow"; // 错误
枚举的使用
使用枚举类型时,我们可以通过访问枚举成员的方式来获取枚举成员的值。例如:
-- -------------------- ---- ------- ---- --------- - --- ----- ----- ----- - -------------------------- -- -- - -------------------------- -- -- ----
上面的代码中,我们通过 Direction.Up
获取了 Up
枚举成员的值,得到了 0
。而通过 Direction[0]
获取了 0
值对应的枚举成员名称,得到了 "Up"
。
枚举的高级用法
枚举在 TypeScript 中还有一些高级用法,例如位枚举(Bitwise Enum)和反向映射(Reverse Mapping)等。
位枚举
位枚举根据二进制位的值定义枚举成员的值。位枚举可以通过按位运算符进行组合,以便表示多个选项。例如:
enum Permission { None = 0, Read = 1 << 0, Write = 1 << 1, Execute = 1 << 2 } let p = Permission.Read | Permission.Write;
上面的代码中,Permission
枚举定义了四个成员,分别为 None
、Read
、Write
和 Execute
,并且通过位移运算符定义了二进制值。而在变量 p
中,我们将 Read
和 Write
两个枚举成员通过按位或运算符进行组合,得到了二进制值 0b011
,表示同时具有读和写权限。
反向映射
在 TypeScript 中,枚举类型支持反向映射。反向映射是指,对枚举成员的值进行反向的查找,从而得到对应的枚举成员名称。例如:
enum Direction { Up, Down, Left, Right } console.log(Direction[Direction.Up]); // 输出 "Up"
上面的代码中,我们通过 Direction[Direction.Up]
可以得到 Up
枚举成员对应的名称,输出了 "Up"
。
总结
本文介绍了 TypeScript 中的枚举类型,并且详细地讲解了枚举的定义、值、使用以及高级用法。枚举类型可以让我们更清晰地表达一些有限的数据集合,从而能够提升代码的可读性和维护性。
参考链接
- TypeScript Handbook - Enums: https://www.typescriptlang.org/docs/handbook/enums.html
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a7e49548841e98944823c8