在 TypeScript
中,枚举(Enum
)是一种用于表示一组命名的常量集合的数据类型。它是一个有助于提高代码可读性和可维护性的工具。
枚举的类型
数字定义枚举
// 使用关键字 enum 定义枚举
enum Direction {
North,
South,
East,
West,
}
// 使用枚举成员
let myDirection: Direction = Direction.North;
console.log(myDirection); // 输出: 0
增长枚举
enum Direction {
North=3,
South,
East,
West,
}
//输出值为4
console.log(Direction.South)
字符串枚举
// 字符串枚举
enum Color {
Red = "RED",
Green = "GREEN",
Blue = "BLUE",
}
let myColor: Color = Color.Green;
console.log(myColor); // 输出: "GREEN"
字符串枚举允许使用字符串值而不是数字值。
const枚举
const 枚举是在编译时被移除的,因此它的存在不会导致实际的 JavaScript 代码输出。这种枚举形式仅用于在编译阶段进行常量的内联替换,以提高性能并减小输出文件的大小。
const枚举用法
const enum Direction {
North,
South,
East,
West,
}
let myDirection: Direction = Direction.North;
console.log(myDirection); // 输出: 0
反向映射:
enum Weekday {
Monday = 1,
Tuesday,
Wednesday,
Thursday,
Friday,
}
console.log(Weekday[2]); // 输出: "Tuesday"
TypeScript 的枚举在编译为 JavaScript 时会生成反向映射,允许通过枚举值获取对应的枚举成员名字。
枚举的实现场景有哪些?
HTTP 请求方法
enum HttpMethod {
GET = "GET",
POST = "POST",
PUT = "PUT",
DELETE = "DELETE",
}
用于表示 HTTP 请求方法,字符串枚举在这里更适用,因为 HTTP 方法通常以字符串形式存在。
js中有枚举吗?ts编译枚举为js是怎么编译的?
在原始的 JavaScript(JS)中,并没有官方的枚举类型。JavaScript 主要使用对象或常量来表示一组相关的常量集合。枚举是一种由 TypeScript 引入的静态类型语言的特性。
在 TypeScript 中,当你使用枚举时,它在编译为 JavaScript 时会生成相应的代码。具体的编译结果取决于枚举的类型和声明方式。
- 数字枚举:
对于数字枚举,它会被编译为普通的 JavaScript 对象,例如:
TypeScript
enum Direction {
North,
South,
East,
West,
}
// 编译后的 JavaScript
var Direction;
(function (Direction) {
Direction[Direction["North"] = 0] = "North";
Direction[Direction["South"] = 1] = "South";
Direction[Direction["East"] = 2] = "East";
Direction[Direction["West"] = 3] = "West";
})(Direction || (Direction = {}));
这里,Direction 被编译成了一个对象,它包含了两部分:数字值到枚举成员名字的映射,以及枚举成员名字到数字值的反向映射。
- 字符串枚举:
对于字符串枚举,编译结果会直接使用字符串字面量,例如:
// TypeScript
enum Color {
Red = "RED",
Green = "GREEN",
Blue = "BLUE",
}
// 编译后的 JavaScript
var Color;
(function (Color) {
Color["Red"] = "RED";
Color["Green"] = "GREEN";
Color["Blue"] = "BLUE";
})(Color || (Color = {}));
字符串枚举的编译结果更为简单,直接将枚举成员名字映射到字符串字面量。
- const 枚举:
对于 const 枚举,它会在编译后被完全移除,只留下实际的值。这种方式有助于提高性能和减小输出文件的大小。
// TypeScript
const enum Direction {
North,
South,
East,
West,
}
// 编译后的 JavaScript(完全移除)