我有一个示例枚举,看起来像:
enum MyEnum {
foo = "Lorem",
bar = "Ipsem",
}
如何从该枚举中获取类似于Lorem | Ipsem
的联合类型?
我希望能够在运行时安全地基于字符串运行函数,例如:
type myType = "Lorem" | "Ipsum";
const doStuff = (s: myType) => {
return "foo";
};
doStuff("Lorem");
除了从枚举值派生而来。
答案 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"]