TypeScript 的 enum
(枚举)是一种用于定义数值集合的类型,通常用于表示一组命名的常量。使用枚举可以提高代码的可读性和可维护性。以下是对 TypeScript 枚举类型的详细介绍。
1. 枚举的基本使用
可以使用 enum
关键字定义枚举。枚举成员可以是数字或字符串。
数字枚举
默认情况下,枚举的成员从 0
开始递增。
enum Direction {
Up, // 0
Down, // 1
Left, // 2
Right // 3
}
let dir: Direction = Direction.Up;
console.log(dir); // 输出: 0
你也可以手动指定某个成员的值:
enum Direction {
Up = 1,
Down,
Left,
Right
}
console.log(Direction.Down); // 输出: 2
字符串枚举
字符串枚举成员必须手动赋值,不能自动递增。
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT"
}
let dir: Direction = Direction.Up;
console.log(dir); // 输出: "UP"
2. 访问枚举成员
你可以通过枚举名称和成员名称访问枚举成员。
console.log(Direction.Left); // 输出: 2
console.log(Direction[2]); // 输出: "Left" (反向映射)
3. 计算属性
可以使用表达式为枚举成员赋值,计算结果会被用于成员的值。
enum Shape {
Circle = Math.PI,
Square = 4,
}
console.log(Shape.Circle); // 输出: 3.141592653589793
4. 常量枚举
常量枚举使用 const
关键字定义,常量枚举在编译时会被内联,通常用于优化性能。
const enum Direction {
Up,
Down,
Left,
Right
}
let dir = Direction.Up; // 编译后的代码直接使用值 0
5. 混合枚举
TypeScript 允许你将字符串和数字类型的成员放在同一个枚举中。
enum Mixed {
No = 0,
Yes = "YES",
}
console.log(Mixed.No); // 输出: 0
console.log(Mixed.Yes); // 输出: "YES"
6. 使用枚举作为类型
你可以使用枚举作为类型来限制变量的值。
enum Color {
Red,
Green,
Blue,
}
let c: Color = Color.Green; // 只允许 Color 中的值
7. 枚举的优缺点
优点:
- 可读性: 使用枚举可以使代码更易读,尤其是当涉及到一组固定的选项时。
- 类型安全: 枚举提供了类型安全,防止使用无效的值。
缺点:
- 编译输出: 枚举在编译时会生成额外的 JavaScript 代码(除非使用常量枚举),这可能在某些情况下影响性能。
总结
TypeScript 的枚举类型为常量的管理提供了强大而灵活的方式。你可以根据具体需求选择使用数字枚举或字符串枚举,并利用枚举提高代码的可读性和类型安全。