在Typescript中你真的会用枚举了吗???

90 阅读1分钟

在Typescript中你真的会用枚举了吗???

以往我们一般写枚举映是根据后端的枚举同样映射;就比如是:

     * 提现状态:0:待审核 1:发放中 2:发放失败 3:已驳回 4:已发放 5:已撤销
     */
    status?: number;
    enum xxxStatus {
        ....
    }

但是在实际工作中,有些枚举状态还需要支持下拉框查询功能,这样上面的枚举就不得不再次增量代码转译或者重新定义一个变量; 分享一个简单示例:

class WithdrawalStatusClass {
    withdrawalStatusEnum: Record<number, string> = {
        0: "待审核",
        1: "发放中",
        4: "已发放",
        2: "发放失败",
        3: "已驳回",
        5: "已取消",
    };
    // 转成数组
    toArray(): any[] {
        return Object.entries(this.withdrawalStatusEnum).map(([key, value]) => {
            return {
                value: Number(key),
                label: value
            };
        });
    }
    // 查找某一个的值
    formatterById(value: string | number): string {
        if (!String(value)) return "";
        return this.withdrawalStatusEnum[Number(value)] || String(value);
    }
    // 可以根据需求做更多 增加方法在类里面实现
    // DO SomeThing
}

export default new WithdrawalStatusClass();

这样可不写传统的枚举enum这种模式,在实际工作中使用:

<el-select v-model="state.dataForm.type" clearable placeholder="请选择提现类型">
                        <el-option v-for="v in WithdrawalStatusClass.toArray()" :key="v.value"   :label="v.label" :value="v.value" />
          </el-select>
// 获取值
WithdrawalStatusClass.formatterById(withdrawalDetail.status || "")

这样增加枚举,使用Class来实现,避免处理一些常用逻辑在页面上; 每个人的代码风格跟想法不同,大家都可以多多分享,这只是我在项目上用到比较多,因为我们的项目用的枚举大部分都得支持查询;后续可以封装一个通用的Class来继承,写起来就更方便了