繁体   English   中英

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

[英]How to use enum-like javascript-class that assigns its values without constructor

我有这个 class,它应该代表一个枚举:

export default class ChangeStatusEnum {
    
        "added" = "added";

        "deleted" = "deleted";

        "edited" = "edited";

        "unedited" = "unedited";

    static constructFromObject(object) {
        return object;
    }
}

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

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

以下是我尝试过的一些事情(在 jenkins-test 中,因此它们可以轻松运行):

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
})

我对自称为“枚举”的数据结构的最低期望是,我可以构造和比较它的值,而不必担心默默地构造不存在的值。 遍历枚举的所有值也很好,但不是绝对必要的。 我想有一种方法可以使用这种数据结构来做到这一点,但由于缺乏高级 javascript 结构的知识,我只是不知道。

1该工具是版本 2.5.1 中的 openapi-generator-cli https://www.npmjs.com/package/@openapitools/openapi-generator-cli与 openapi-generator-maven-plugin 版本 6.0.0 https mvnrepository.com/artifact/org.openapitools/openapi-generator-maven-plugin由于这是一些成熟的工具,我希望他们的枚举解决方案可以使用,这就是为什么我将这个问题作为 js 问题而不是作为 openapi 提出-问题。

我认为使用它最优雅的方法是创建它的一个实例并将其用作常量。 为此不需要“constructFromObject”功能。 所以只要把它放在导入下面:

const changeStatusEnum = new ChangeStatusEnum();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM