何时用ts枚举

78 阅读2分钟

很多人都知道ts有枚举,但是却从来没有用过枚举

本文将介绍项目中何时使用枚举可以增加程序的可读性和可维护性

1. 枚举的用法

在讨论枚举的优势之前,我们先回顾一下枚举的用法。

1.1 枚举的定义

枚举在某些情况下用处不大,可以用 type 和联合类型替代

// 数字枚举
enum Direction {
    Up,
    Down,
    Left,
    Right
}
// type Direction = "Up" | "Down" | "Left" | "Right

// 自定义枚举值
enum Gender {
    Male = "男"
    Famale = "女"
}

1.2 访问枚举

枚举在编译后会变成一个对象,其中数字枚举会变成键值对和索引对的对象。

console.log(Direction.Up); // 输出: 0
console.log(Direction[0]); // 输出: Up
console.log(Direction);
// 输出: {
//     '0': 'Up',
//     '1': 'Down',
//     '2': 'Left',
//     '3': 'Right',
//     Up: 0,
//     Down: 1,
//     Left: 2,
//     Right: 3
// }

console.log(Gender.Famale); // 输出:"女"
console.log(Gender); // 输出: { Male: '男', Famale: '女' }

2. 枚举的优势

枚举在编译后会变成一个对象,存在于编译后的 js 代码中

使用自定义枚举可以方便地将它的值赋给变量

这意味着枚举不仅是类型约束,更是一个可以使用的变量。

// type 仅作为类型约束
type GenderType = "男" | "女"
const gender: GenderType = "男"
input.value = gender

// enum 可以直接赋值
enum GenderEnum {
    Male = "男",
    Famale = "女",
}
input.value = GenderEnum.Male

2.1 枚举的实际案例

考虑一个用户注册界面,需要选择性别

原来性别选项为男/女,现在产品需要改为帅哥/美女

如果使用了枚举,我们只需要在一个地方进行改动

<div> 
    <button @click="...">{{ Gender.Male }}</button> 
    <button @click="...">{{ Gender.Famale }}</button> 
</div>
export enum Gender {
    Male = "帅哥",
    Famale = "美女",
}

如果项目中多个页面和函数都用到了这个 "男/女" 字面量,使用枚举的优势就体现出来了。

3 枚举的编译结果

下面展示了ts枚举编译为js代码的结果,有兴趣的可以研究一下

3.1 自定义枚举

enum Gender {
    Male = "帅哥",
    Famale = "美女",
}

编译后的 js 代码:

var Gender;
(function (Gender) {
    Gender["Male"] = "\u5E05\u54E5";
    Gender["Famale"] = "\u7F8E\u5973";
})(Gender || (Gender = {}));

3.2 数字枚举

enum Direction {
    Up,
    Down,
    Left,
    Right,
}

编译后的 js 代码:

var Direction;
(function (Direction) {
    Direction[Direction["Up"] = 0] = "Up";
    Direction[Direction["Down"] = 1] = "Down";
    Direction[Direction["Left"] = 2] = "Left";
    Direction[Direction["Right"] = 3] = "Right";
})(Direction || (Direction = {}));


{
  '0': 'Up',
  '1': 'Down',
  '2': 'Left',
  '3': 'Right',
  Up: 0,
  Down: 1,
  Left: 2,
  Right: 3
}

通过这些示例,我们可以看到使用枚举不仅能提高代码的可读性和可维护性,还能方便地进行全局修改,尤其是在大型项目中。

希望本文能帮助你更好地使用 TypeScript 枚举。