Typescript 枚举为每个枚举实例封装一个 bool 值

标签 typescript enums

在 Typescript 中,为每个枚举实例分配 bool 值的惯用方法是什么?

假设我有一个用于各种错误代码的枚举。对于每个错误代码,我都有一个 bool 值,说明错误是否必须暴露给最终用户。在Java中,我想,

enum MyError {
    ERROR1(true),
    ERROR2(false),
    ERROR3(false);

    private boolean expose;

    public boolean shouldExpose() {
        return expose;
    }

    MyError(boolean expose) {
        this.expose = expose;
    }
}

这里, bool 信息(是否必须向用户公开错误)被封装在枚举本身中。

 MyError myError = MyError.ERROR1;
 System.out.println(myError.shouldExpose()); //true

由于 TS 不允许在枚举中使用 bool 值,我该如何在 Typescript 中执行此操作?我应该在这里使用 class 还是 type

目标是让枚举/类/类型中包含 bool 信息。因此,我不想创建像这样的包装类型

{
    error: MyError
    expose: boolean
}

因为它可能导致错误的配置/映射(对于其他错误,MyError.ERROR1 可能会暴露为 false,反之亦然)。

最佳答案

您可能想放弃实际的枚举,而是创建自己的常量集。它比较冗长,但可能会满足您的需求。

const MyError = {
  error1: {
    name: 'ERROR1',
    expose: true
  },
  error2: {
    name: 'ERROR2',
    expose: false
  },
  error3: {
    name: 'ERROR3',
    expose: false
  }
} as const;

type MyError = typeof MyError[keyof typeof MyError]


function x(err: MyError) {
  console.log(err);
}

x(MyError.error1);
x({name: 'ERROR1', expose: true});
x({name: 'ERROR1', expose: false}); // EXPECTED ERROR

function getError(): MyError {
  return MyError.error1;
}

var e: MyError = getError();
console.log(MyError.error1 == e);  // true
console.log(MyError.error2 == e);  // false

Playground link

关于Typescript 枚举为每个枚举实例封装一个 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70577185/

相关文章:

c++ - 使用 GetStatus 时停止枚举值的编译器错误

javascript - 掩码输入值日期格式 Angular

typescript 类型 T 或函数 () => T 用法

javascript - 编译 typescript 时避免使用全局函数

jsp - 与 JSTL 中的枚举值比较

javascript - 如何使用 JSDOC3 记录枚举常量

java - jOOQ select 到 POJO 中,只为某些字段指定映射

reactjs - 联系 & GraphQL : Root typing path for the type "context" does not exist

oop - 如何在 Typescript 中将值从一个类的方法传递到另一个类的方法?

c++ - 枚举序列化? C++