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