首页 文章

打字稿中的字符串枚举

提问于
浏览
1

我想在typescript中有一组字符串枚举,所以我可以做一些事情,比如让用户从一组预定义的选项中进行选择 .

我在这个答案中找到了一个很好的解决方案:How to convert string to enum in TypeScript?

但是,这仅适用于单个单词...(基本上,上面允许您获取枚举名称值 - 并且不能在其中包含空格) .

所以,进一步看,我发现这个人有一个解决方法:Workaround for string based enums in typescript

这将允许这样的事情工作:

export enum EventType {
    Photoshoot = <any>"Photoshoot",
    BookingMeeting = <any>"Booking Meeting",
    PostShootMeeting = <any>"Post Shoot Meeting",
    Purchase = <any>"Purchase",
    Print = <any>"Print"
}

唯一的回应基本上说这样做是不安全的 . (但我应该说,它可以工作 - 我可以输入EventType.dot ...而Atom编辑器给我5个驼峰式选项供选择(保持代码中的一致性)然后我可以使用它来获取字符串值吐出来给我的用户一个充满空间的体验,将来我可以更改枚举和不同的语言/选项措辞而不会弄乱'code'等等...

有一个更好的方法吗?我宁愿不做'不安全' - 但我不知道其他任何方式 .

2 回答

  • 5

    TypeScript枚举是基于数字的 . 您可以使用带有联合类型的字符串文字来模拟基于字符串的枚举,如下面的CardinalDirection示例所示 .

    type CardinalDirection =
        "North"
        | "East"
        | "South"
        | "West";
    
    function move(distance: number, direction: CardinalDirection) {
        // ...
    }
    
    move(1,"North"); // Okay
    move(1,"Nurth"); // Error!
    

    这里还有更多:https://basarat.gitbooks.io/typescript/content/docs/types/literal-types.html

    字符串枚举正在关注https://github.com/Microsoft/TypeScript/issues/3192

  • -1

    您还有其他选项,如Reverse-Mapping for String Enums中所述 .

    这是一个例子:

    type EventType = "Photoshoot" | "Booking Meeting" | "Post Shoot Meeting" | "Purchase" | "Print";
    const EventType {
        get Photoshoot(): EventType { return "Photoshoot"; },
        get BookingMeeting(): EventType { return "Booking Meeting"; },
        get PostShootMeeting(): EventType { return "Post Shoot Meeting"; },
        get Purchase(): EventType { return "Purchase"; },
        get Print(): EventType { return "Print"; }
    }
    

相关问题