在TypeScript中掌握枚举:关于如何使用它的指南

typescript是javascript的一个超集,可以帮助您编写类型安全的代码。

使用typescript,您将能够更早地捕捉错误并修复它们。 typescript的一个重要特性是enums。 enum是typescript中的一种流行构造,可以帮助您编写更安全的代码。

在本文中,我将解释enums,如何创建和使用它们,以及其他需要考虑的事项。

什么是enum?

enum是枚举类型的简写。枚举数据类型由该类型的变量可以取的不同值来定义。它可以取的不同值通常称为成员或元素。

在本文中,我们将称它们为成员。enums不仅仅是typescript的一个特性。相反,枚举类型也存在于其他编程语言中并被使用。使用enums可以在typescript程序中提供更好的类型安全性。

也可以阅读: 作为开发者,需要了解的顶级typescript库和运行时

为什么使用enums?

enums帮助您指定变量可以容纳的值。它们还帮助您指定函数参数可以接受的值。这有助于确保开发者始终为变量和函数参数提供预期的值。这将有助于消除错误,使您编写更安全和更健壮的代码。

使用enums的先决条件

在本教程中,我将演示如何在typescript中使用enums。要跟随本教程,您需要能够运行和执行typescript代码。

因此,您需要安装nodejs以执行javascript代码。如果您尚未安装typescript,下面的视频将指导您如何安装。

或者,如果您想要立即编译和执行脚本,可以使用ts-node。虽然在本文中我将使用这种方法,但对于较大的项目,我建议安装typescript。要使用ts-node执行脚本,使用以下命令:

npx ts-node 

本文还假设您熟悉javascript和基本的typescript。

使用简单的enum

如何创建一个简单的enum

在typescript中,可以使用enum关键字创建enums。接着是枚举的名称,然后是枚举所包含的成员的列表。以下是一个示例,我们声明了一个枚举,表示指南针上的四个基本方向。

enum direction {
    north,
    east,
    south,
    west
}

请注意,枚举中的成员周围没有引号-它们不是字符串。

如何使用一个简单的enum

使用以下方式将枚举值分配给变量:

const heading: direction = direction.north;

因为我们在声明时将变量赋值,typescript可以推断出数据类型。因此,我们不需要断言类型。相反,我们可以这样写:

const heading = direction.north;

要找到heading变量的值,我们可以使用console.log进行打印。

console.log(heading);

执行结果如下:

0

变量 heading 包含了值 0,即使我们将值 direction.north 赋给它。这是因为每个成员在创建枚举时都会被分配一个数值。第一个成员被分配为 0,第二个为 1,以此类推。下面是一个演示:

console.log(direction.north, direction.east, direction.south, direction.west)

因此,你可以通过断言 heading 变量等于零来检查它是否包含 north。例如:

// 断言相等
let isnorth = heading == 0;

// 打印结果
console.log(isnorth);

如前面所示,direction.north 等于 0。所以,我们可以检查 heading 是否等于 direction.north,而不是等于零。

// 检查方向是否为 north
isnorth = heading == direction.north;

// 打印结果
console.log(isnorth);

上述内容非常有用,很可能是你使用枚举值的方式。然而,你还可以做更多的事情,稍后你将看到。下一节将讨论如何使用自定义值。

使用自定义值

当你创建一个枚举时,typescript 会自动为成员分配从零开始的数值。但是,你可能希望成员具有自定义值而不是默认值,这种情况下,你可以进行赋值。例如:

enum starrating {
    verypoor = 1,
    poor = 2,
    average = 3,
    good = 4,
    excellent = 5
}

或者,你可以这样做:

enum starrating {
    verypoor = 1,
    poor,
    average,
    good,
    excellent
}

在这种情况下,第一个成员的值将被分配为 1。后续的选择将从前一个选择中自动递增。因此,poor 的评分为 2,average 为 3,以此类推。

枚举中的选择并不总是具有数值,稍后你将看到。然而,具有数值的选择将行为类似于普通数值。

console.log(typeof starrating.average);

这将打印 "number"。这意味着你可以对其进行数字操作,包括进行比较,例如:

console.log(starrating.excellent > starrating.average)

这将打印 "true"

使用字符串作为自定义值

如前所述,枚举选择可以具有字符串值,而不仅仅是数字。下面是如何实现这一点:

enum choice {
    redpill = "know everything"
    bluepill = "know nothing"
}

在这种情况下,枚举选择的行为与前面的选择相似。然而,由于值是字符串,你可以执行字符串操作,而不是像前面的示例中那样进行数字操作。

异构枚举

你也可以混合使用字符串和数字值。虽然这种做法不被鼓励并且没有太大用处,但仍然是可能的。

enum mixed {
    first = "string"
    second = 2
}

最后的话

在这篇文章中,我们介绍了typescript中的枚举是什么以及它们的重要性。此外,我们还介绍了枚举成员可以具有的不同类型的值。

接下来,查看我们的文章:type vs. interface in typescript

类似文章