【问题标题】:Getting a union type with all string enum values获取具有所有字符串枚举值的联合类型
【发布时间】:2021-08-12 19:22:58
【问题描述】:

我有一个示例枚举,如下所示:

enum MyEnum {
    foo = "Lorem",
    bar = "Ipsem",
}

如何从该枚举中获得类似于 Lorem | Ipsem 的联合类型?

我希望能够在运行时安全地运行基于字符串的函数,例如:

type myType = "Lorem" | "Ipsum";
const doStuff = (s: myType) => {
    return "foo";
};

doStuff("Lorem");

从枚举值派生的除外。

【问题讨论】:

标签: typescript


【解决方案1】:

我不知道有任何方法可以获取枚举文字类型下的字符串文字类型。您最好的选择可能是使用命名空间而不是枚举:

namespace MyEnum {
  export const foo = "Lorem";
  export const bar = "Ipsem";
}
type MyEnum = (typeof MyEnum)[keyof typeof MyEnum];

有关其他背景,请参阅this thread

【讨论】:

    【解决方案2】:

    template literal 运算符的帮助下,可以将枚举的值列表推断为类型:

    enum MyEnum {
        foo = "Lorem",
        bar = "Ipsem",
    }
    
    type MyEnumValue = `${MyEnum}`
    // => type MyEnumValue = "Lorem" | "Ipsem"
    
    const values: MyEnumValue[] = Object.values(MyEnum)
    // => ["Lorem", "Ipsem"]
    

    参考文章:Get the values of an enum dynamically (免责声明:作者在此)

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 2018-11-25
      • 2020-12-24
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多