获取具有所有字符串枚举值的联合类型

时间:2018-08-14 16:17:02

标签: typescript

我有一个示例枚举,看起来像:

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

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

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

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

doStuff("Lorem");

除了从枚举值派生而来。

2 个答案:

答案 0 :(得分:3)

我不知道要获取枚举文字类型基础的字符串文字类型的任何方法。最好的选择可能是使用名称空间而不是枚举:

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

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

答案 1 :(得分:0)

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