TypeScript 枚举是在处理 TypeScript 语言时会经常遇到的一个短语。
TypeScript 是最年轻的语言之一,但也被列为开发人员最流行的编程语言之一。 TypeScript 是 JavaScript 的扩展(超集)。 因此,任何有效的 JavaScript 代码在 TypeScript 中也有效。 然而,TypeScript 引入了静态类型功能(JavaScript 中缺少的功能)。
什么是 TypeScript 枚举、它们的用例以及如何创建它们? 本文将涵盖您需要了解的有关枚举的所有内容。
目录
什么是 TypeScript 枚举?
枚举(枚举类型)是具有恒定长度的数据结构,保存一组不变的值(常量)。 TypeScript 并不是唯一使用枚举的语言,因为它们在 C# 和 Java 等面向对象语言中可用。
在 TypeScript 中,枚举允许开发人员创建一组不同的案例或文档意图。 它们对于设置只能是一定数量的值的值或属性也很重要。 例如,世界上只能有七大洲。
总而言之,TypeScript 枚举在以下方面很重要:
- 它们很灵活,因为它们允许开发人员轻松记录和表达意图和用例
- 枚举允许开发人员在 JavaScript 中创建节能的自定义常量
- 将 TypeScript 代码编译为 JavaScript 代码时节省编译和运行时
TypeScript 枚举可以是字符串或数字形式。 但是,这些枚举是经过预处理的,并且在测试阶段不会进行测试。 TypeScript 将枚举翻译/转换为 JavaScript 代码。
TypeScript 中的不同枚举
现在您已经了解了枚举,是时候看看它们在 TypeScript 中的工作原理了。 您可以通过在本地计算机上下载 TypeScript 和 Node.js 或使用在线解决方案来设置开发服务器。 我们将使用 TypeScript 游乐场 演示不同的 TypeScript 枚举。
这些是 TypeScript 中不同的枚举类型;
#1. 数字枚举
您需要使用关键字“enum”,并在其后跟上要创建的枚举的名称。 之后,您创建将指定枚举成员的咖喱括号。 这是数字枚举的示例;
enum CardinalDirections { North = 5, East, South, West, };
上面表示一个名为 CardinalDirections 的枚举,它有四个成员。 在这种情况下,只能有四个值(北、东、南和西),这使得枚举成为保存数据的绝佳选择。
我已经分配了 CardinalDirections.North 值 5。但是,我没有分配其他值,因为 TypeScript 会自动完成其余的工作。 例如,当 TypeScript 将先前的值增加 1 时,CardinalDirections.East 的值将为 6。
CardinalDirections.West 将为 8。
如果我们不给柯里括号内的第一项赋值怎么办? 我们的枚举将是;
enum CardinalDirections { North, East, South, West, };
TypeScript 会自动分配 North 值 0。如果您键入 CardinalDirections.West 之类的内容,您将得到 3
#2. 字符串枚举
字符串枚举中的每个成员都必须使用另一个字符串枚举成员或字符串文字进行初始化。 这是字符串枚举的示例;
enum Direction { Up = "UP", Down = "DOWN", Left = "LEFT", Right = "RIGHT", }
该枚举不会像数字枚举中那样递增。 如果你运行这段代码;
enum Direction { Up = "UP", Down = "DOWN", Left = "LEFT", Right = "RIGHT", } console.log(Direction.Right)
这就是你得到的;
“正确的”
#3. 异构枚举
您可以混合数字和字符串成员来形成异构枚举。 这是一个例子;
enum HeterogeneousEnum { No = 0, Yes = "YES", }
#4。 常量和计算枚举成员
枚举成员具有与其关联的值,这些值可以是“常量”或“计算的”。
这是常量枚举的示例;
enum E1 { X, Y, Z, }
在这种情况下,枚举的第一个成员没有初始值设定项,TypeScript 为其分配值 0。
你也可以考虑这个例子;
enum E1 { X=1, Y, Z, }
这也是一个常量枚举,因为第一个成员被分配了一个值,并且增量规则应用于其余成员。
计算枚举混合了常量和计算成员。 看看这个例子;
enum Color { Red = 100, Green = (Math.random() * 100), Blue = 200 }
枚举成员“Blue”是常量成员。 另一方面,枚举成员“Green”是在运行时使用 Math.random() 函数计算的枚举。
#5。 常量枚举
const 枚举用于提高数字枚举的性能。 在本例中,我们将枚举声明为 const。
考虑这段显示一周中的日子的代码;
enum Weekday { Monday = 1, Tuesday, Wednesday, Thursday, Friday }
如果我们运行 console.log(Weekday.Thursday),我们得到的答案是 4。但是,如果我们检查编译时生成的 JavaScript,我们会得到这个;
"use strict"; var Weekday; (function (Weekday) { Weekday[Weekday["Monday"] = 1] = "Monday"; Weekday[Weekday["Tuesday"] = 2] = "Tuesday"; Weekday[Weekday["Wednesday"] = 3] = "Wednesday"; Weekday[Weekday["Thursday"] = 4] = "Thursday"; Weekday[Weekday["Friday"] = 5] = "Friday"; })(Weekday || (Weekday = {})); console.log(Weekday.Thursday);
我们可以更改此代码并将“Weekday”声明为常量;
const enum Weekday { Monday = 1, Tuesday, Wednesday, Thursday, Friday }
如果我们运行此代码 console.log(Weekday.Thursday),则在编译时生成的 JavaScript 将是:
"use strict"; console.log(4 /* Weekday.Thursday */);
您可以看到,当您将枚举声明为 const 时,编译时的 JavaScript 代码得到了优化。
#6。 环境枚举
环境枚举使用“declare”关键字来描述已经存在的枚举类型的形状。 考虑这个例子;
declare enum Color { Red, Green, Blue }
环境枚举在任何模块外部声明,可用于创建可重用类型。 因此,您始终可以导入环境枚举并在组件中使用它们,只要它们是全局声明的即可。
您现在了解了 TypeScript 中的不同枚举类型。 我们现在可以展示如何以不同的方式使用枚举。 这将是我们的参考代码;
enum Direction { North="N", East="E", South="S", West="W", };
这些是一些用例;
- 提取枚举成员。 例如,如果我们想访问 North,我们可以使用
console.log(方向.北); // 输出:’N’
- 使用枚举成员:您可以选择某个枚举成员来代表特定方向。 例如,
const currentDirection = Direction.East; console.log(`The current direction is ${currentDirection}`);
这将给出输出“当前方向是 E”
TypeScript 中的枚举与对象映射
枚举用于表示一组有限的值。 例如,彩虹的颜色或一周中的日子。 枚举是强类型的,这意味着它们捕获开发过程中的任何错误。 这是 TypeScript 枚举的示例;
enum Color { Red, Green, Blue, }
对象映射/字典/键值对存储和检索与特定键关联的值。 您可以使用 TypeScript 对象映射来存储任何类型的数据。 但是,它们不是严格类型的,这意味着在开发过程中可能无法捕获类型错误。 这是相同颜色的对象映射的示例;
const colors = { red: "FF0000", green: "00FF00", blue: "0000FF", };
TypeScript 中枚举和对象映射之间的主要区别是:
- 枚举是严格类型化的,而对象映射不是
- 枚举是一种“类型”,而对象映射是一种数据结构
- 枚举不灵活,而对象映射灵活
在 TypeScript 中使用枚举的最佳实践
我们已经说过,TypeScript 并不是唯一具有枚举功能的编程语言。 遵循最佳实践可确保您编写干净、优化且无错误的代码。 这些是编写/使用 TypeScript 枚举时的一些最佳实践;
- 枚举名称大写:命名枚举时始终将第一个单词大写。 例如,始终建议使用枚举“Number”而不是“number”。
- 使用枚举作为常量:枚举最适合用来声明一组固定的相关项。 例如,一周只能有7天。 枚举成员在执行期间不应更改。
- 避免过度使用枚举:您可能刚刚学习了一个新概念,并希望在 TypeScript 项目中几乎所有地方都使用它。 但是,请始终适度使用 TypeScript 枚举。 当您想要保持代码可读性时,TypeScript 枚举是一个不错的选择。
- 将枚举视为枚举:您可以将 TypeScript 枚举用于不同目的。 但是,最好的选择是使用它们仅表示枚举而不表示其他数据结构。
- 避免自动枚举:如果您没有显式分配值,TypeScript 会为枚举成员分配值。 提供枚举值并避免执行代码时出现意外行为。
- 文档枚举:如果您打算让公众使用您的代码,请始终对您的代码进行记录或评论。 解释每个枚举的作用以及为什么是最佳用例。
作为开发人员,您还可以探索顶级 TypeScript 库和运行时来了解。
结论
您可以在 TypeScript 中定义枚举并解释不同的类型及其用例。 当您希望代码清晰时,TypeScript 会派上用场。 但是,在某些情况下您应该避免使用它们并使用对象。
例如,在处理动态值时不应使用枚举。 您也不能使用枚举作为变量; 你的程序将返回错误。
如果您仍然对 TypeScript 和 JavaScript 感到困惑,您可以了解更多有关 TypeScript 和 JavaScript 之间差异的信息。