如何使用类似枚举的javascript类,该类在没有构造函数的情况下分配其值



我有一个类,它应该表示一个枚举:

export default class ChangeStatusEnum {

"added" = "added";
"deleted" = "deleted";
"edited" = "edited";
"unedited" = "unedited";
static constructFromObject(object) {
return object;
}
}

它是由openapi生成器1在管道中生成的,因此更改它不是一个选项。这不是关于在vanilla-js或typescript中定义枚举的最佳实践的问题,而是关于如何使用这个类的问题。

我不理解分配给字符串的语法,我不知道这四个字符串在哪里可以访问。

以下是我尝试过的一些东西(在詹金斯测试中,这样它们就可以很容易地运行(:

test("access", () => {
console.log(ChangeStatusEnum) // prints [class ChangeStatusEnum]
console.log(JSON.stringify(ChangeStatusEnum)) // prints undefined
console.log(
ChangeStatusEnum.constructFromObject("deleted") === "deleted"
) // prints true
console.log(
ChangeStatusEnum.constructFromObject("nonexisting") === "nonexisting"
) // also prints true, which means this syntax has no value over just using strings instead of enums
console.log(ChangeStatusEnum["added"]) // prints undefined
console.log(ChangeStatusEnum.added) // prints undefined
})

我对一个称自己为";enum";我可以构建和比较它的价值观,而不用担心默默地构建不存在的价值观。对枚举的所有值进行迭代也很好,但不是绝对必要的。我想有一种方法可以用这个数据结构做到这一点,但由于缺乏高级javascript构造的知识,我只是不知道。

1该工具是2.5.1版本中的openapi生成器clihttps://www.npmjs.com/package/@openapitools/openapi生成器cli与openapi生成器maven插件版本6.0.0https://mvnrepository.com/artifact/org.openapitools/openapi-generator-maven-plugin由于这是一个成熟的工具,我希望他们的enum解决方案是可用的,这就是为什么我把这个问题作为js问题而不是openapi问题来问。

我认为使用它最优雅的方法是创建它的实例并将其用作常量。此操作不需要"constructFromObject"-函数。所以把这个放在进口下面:

const changeStatusEnum = new ChangeStatusEnum();

之后,可以使用普通点表示法访问成员:

changeStatusEnum.added // evaluates to the string "added"

最新更新