TypeScript枚举解释:代码清晰性的关键
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 playground演示不同的typescript枚举。
这些是typescript中的不同枚举类型:
#1. 数字枚举
您需要使用关键字“enum”,然后跟随您想要创建的枚举的名称。之后,您创建一个花括号,用于指定枚举的成员。这是一个数字枚举的示例:
enum cardinaldirections {
north = 5,
east,
south,
west,
};
上面表示了一个名为cardinaldirections的枚举,它有四个成员。在这种情况下,只能有四个值(north,east,south和west),使枚举成为保存数据的绝佳选择。
我将cardinaldirections.north
的值设置为5。然而,我没有给其他值赋值,因为typescript会自动完成剩下的工作。例如,cardinaldirections.east
的值将为6,因为typescript将先前的值增加1。
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)
这是你得到的结果;
“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. 常量枚举
常量枚举用于提高数字枚举的性能。在这种情况下,我们将枚举声明为常量。
考虑下面显示一周中的天数的代码;
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 */);
你可以看到,在将enum声明为const时,编译时生成的javascript代码进行了优化。
#6. 环境枚举
环境枚举使用“declare”关键字来描述已存在的枚举类型的形状。考虑以下示例:
declare enum color {
red,
green,
blue
}
环境枚举在任何模块之外声明,可以用于创建可重用的类型。因此,只要全局声明了它们,你就可以随时导入环境枚举并在组件中使用它们。
如何在typescript中提取对象类型
现在你已经了解了typescript中的不同枚举类型。我们现在可以展示如何以不同的方式使用枚举。这将是我们的参考代码:
enum direction {
north = 'n',
east = 'e',
south = 's',
west = 'w',
};
以下是一些用法示例:
- 提取枚举成员。例如,如果我们想访问north,我们可以使用
console.log(direction.north); // 输出:'n'
- 使用枚举成员:你可以选择某个枚举成员表示特定的方向。例如,
const currentdirection = direction.east;
console.log(`当前方向是${currentdirection}`);
这将输出“当前方向是e”
typescript中的枚举 vs. 对象映射
枚举用于表示有限集合的值。例如,彩虹的颜色或一周的天数。枚举是强类型的,意味着它们可以在开发过程中捕获任何错误。以下是typescript枚举的示例:
enum color {
red,
green,
blue,
}
对象映射/字典/键值对用于存储和检索与特定键相关联的值。你可以使用typescript对象映射来存储任何类型的数据。然而,它们不是严格类型的,意味着类型错误可能在开发过程中无法捕获。以下是相同颜色的对象映射示例:
const colors = {
red: "ff0000",
green: "00ff00",
blue: "0000ff",
};
typescript中枚举和对象映射的主要区别:
- 枚举是严格类型的,而对象映射不是
- 枚举是一种“类型”,而对象映射是一种数据结构
- 枚举不够灵活,而对象映射更灵活
typescript中使用枚举的最佳实践
我们已经说明了typescript并不是唯一拥有枚举功能的编程语言。遵循最佳实践可以确保你编写出干净、优化和无bug的代码。以下是使用/编写typescript枚举的一些最佳实践:
- 大写枚举名称:在为枚举命名时,始终大写第一个单词是最佳实践。例如,建议始终使用枚举'number'而不是'number'。
- 使用枚举来声明常量:枚举最适合用于声明一组相关的固定项。例如,一周只有7天。枚举成员在执行过程中不应该改变。
- 避免过度使用枚举:你可能刚学会一个新概念,想在typescript项目中的各个地方都使用它。然而,要适度使用typescript枚举。在需要保持代码可读性时,typescript枚举是一个不错的选择。
- 将枚举视为枚举:可以使用typescript枚举来实现不同的目的。然而,最好的选择是只将它们用于表示枚举,而不是其他数据结构。
- 避免自动枚举:如果你不显式为枚举成员赋值,typescript会为它们分配值。给枚举赋予值,避免执行代码时出现意外行为。
- 文档化枚举:如果你希望代码被公众使用,始终为其编写文档或注释。解释每个枚举的作用和最佳用例。
你还可以探索一些顶级的typescript库和运行时,以作为开发人员了解。
结论
你可以在typescript中定义枚举并解释不同类型及其用例。当你想要代码清晰明了时,typescript会派上用场。然而,在某些情况下,你应该避免使用它们,而是使用对象。
例如,在处理动态值时不应使用枚举。你也不能将枚举用作变量,否则程序将返回错误。
如果你对typescript和javascript之间的区别仍然感到困惑,可以了解更多。