解释TypeScript中的枚举

解释TypeScript中的枚举

在进入 “枚举 “之前,有必要了解一下 typescript 中流行的关键字 “const”。当我们声明一个变量为 “const “时,我们不能改变分配给它的值。

所以,枚举只不过是这些常量数据类型的一个集合。我们可以在 “enum “关键字的帮助下创建enum。Enum是Enumerations的缩写,在enum下声明的每个常量变量都被称为该enum的成员。

在这篇文章中,我们将了解typescript中的枚举,它们的特点,以及枚举的主要类型。

TypeScript中枚举的特点

  • Typecript中的枚举拥有一个令人惊讶的特点。如果我们不对枚举的成员变量赋予任何重要性,它们的索引值就是默认值。

  • 枚举的每个成员都必须包含一个值。我们可以指定一个常数,或者也可以从一个函数中计算出一个值。如果上述情况都没有,枚举成员存储的是默认的常量值。

  • 枚举成员也可以用常量表达式进行分配。typescript中的任何常量表达式都是在编译时而非运行时进行评估的。

  • Enums可以作为参数传递给函数,通过函数进行计算,并返回给函数。

  • typescript中的Enum支持反向映射的概念。通过反向映射,我们可以从其值中访问成员,从其索引成员中访问值。这个概念背后的想法是,枚举对象在内部以两种方式存储成员,即通过它的变量指代值和值指代枚举变量。由于typescript通常将代码转换为javascript,它支持反向映射。

  • 字符串枚举不支持反向映射;在异质枚举中,只有数字枚举支持反向映射。

  • 常量枚举类型在编译时被删除,并将被替换成它们的值。因此,常量枚举比普通枚举更快,减少了在编译时产生额外代码的复杂性。但是我们只能在const枚举中使用常量成员,而不能使用计算的成员。

枚举的类型

数值枚举

在这种类型的枚举中,枚举的成员被赋予数字值。数字枚举拥有自动递增的特性。例如,如果我们把数字5分配给枚举的第一个常量变量,那么下面的常量变量分配的值就会递增1,比如6分配给枚举的第二个成员,7分配给下一个,以此类推。

示例

在下面的例子中,我们已经创建了一个名为color的枚举类型。在color里面,我们创建了四个常量变量,名字分别是红、蓝、黄、粉。为了证明数字枚举的自动增量性质,我们为前两个常量变量设置了值,并将另外两个变量保留为默认值。让我们看看输出中的默认值。

//enum type color
enum color{
   //assign numeric value
   red = 1,
   blue = 3,
   pink,
   yellow
}
//print const variables values
console.log(color.red);
console.log(color.blue);
console.log(color.pink);
console.log(color.yellow);

编译时,它将生成以下JavaScript代码。

//enum type color
var color;
(function (color) {
   //assign numeric value
   color[color["red"] = 1] = "red";
   color[color["blue"] = 3] = "blue";
   color[color["pink"] = 4] = "pink";
   color[color["yellow"] = 5] = "yellow";
})(color || (color = {}));
//print const variables values
console.log(color.red);
console.log(color.blue);
console.log(color.pink);
console.log(color.yellow);

输出

上述代码将产生以下输出 –

1
3
4
5

正如用户在输出中所注意到的那样,以下的常量变量在蓝色之后被赋予了默认值,即递增1。

字符串枚举

IString枚举与数字枚举类似,只是字符串枚举的值是用字符串而不是数字分配的。字符串枚举不具有自动递增行为。

示例

在下面的例子中,我们已经创建了一个名为 “姓名 “的字符串类型的枚举。在创建的枚举下,我们声明了四个变量student1、student2、student3和student4。这些变量被分配为字符串字面。在字符串枚举类型中没有存储默认的字符串值,如果没有赋值,只有数字值被存储为默认值。

enum names{
//assign string literal
   student1 = "john",
   student2 = "srujana",
   student3 = "sam",
   student4 = "ram"
}
//print const variables values
console.log(names.student1);
console.log(names.student2);
console.log(names.student3);
console.log(names.student4);

编译时,它将生成以下JavaScript代码。

var names;
(function (names) {
   //assign string literal
   names["student1"] = "john";
   names["student2"] = "srujana";
   names["student3"] = "sam";
   names["student4"] = "ram";
})(names || (names = {}));
//print const variables values
console.log(names.student1);
console.log(names.student2);
console.log(names.student3);
console.log(names.student4);

输出

上述代码将产生以下输出 —

john
srujana
sam
ram

用户可以在输出中注意到,前三个枚举变量是字符串类型。因此,这是一个字符串类型的枚举。

异质性枚举

这是一个数字和字符串枚举的组合。也就是说,在这种类型的枚举中,我们既可以为其成员分配字符串值,也可以分配数字值。

示例

在下面的例子中,我们已经创建了一个枚举类型的学生。在这个学生里面有四个常量变量:name, roll_no, gender, and mob_no。姓名和性别是字面字符串类型,而roll_no和mob_no是数字值。

//enum type student
enum student{
   //assign string literal
   name = "srujana",
   roll_no = 15,
   gender = "female",
   mob_no = 9873890414
}
console.log(student.name);
console.log(student.roll_no);
console.log(student.gender);
console.log(student.mob_no);

编译时,它将生成以下JavaScript代码。

//enum type student
var student;
(function (student) {
   //assign string literal
   student["name"] = "srujana";
   student[student["roll_no"] = 15] = "roll_no";
   student["gender"] = "female";
   student[student["mob_no"] = 9873890414] = "mob_no";
})(student || (student = {}));
console.log(student.name);
console.log(student.roll_no);
console.log(student.gender);
console.log(student.mob_no);

输出

上述代码将产生以下输出 –

srujana
15
female
9873890414

在这篇文章中,用户被介绍到了typescript的关键字 “enum”。它的特点和类别都得到了很好的解释,而且还分享了所讨论的每一种枚举类型的例子。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程