【发布时间】:2021-10-26 08:45:31
【问题描述】:
假设我有 2 个枚举:哺乳动物和鱼类
enum Mammal {
bear = 'bear',
human = 'human'
}
enum Fish {
salmon = 'salmon',
}
然后我合并了这些枚举:
const Animal = { Mammals, Fish };
type Animal = Mammals | Fish;
在将变量类型转换到该父级时,我如何找到它所属的子枚举?
let animal = <Animal>'salmon'
基本上我想要的是这样的:
if (typeof <Animal> 'salmon' == typeof Mammal) {
//do stuff...
}
【问题讨论】:
-
没有什么可以阻止相同的值出现在多个“子”枚举中,因此没有逻辑方法可以推断这一点。此外,
typeof当用作这样的语句时,总是会给你'string'。 -
真可惜。还有其他方法可以实现这种功能吗?只要我可以从父类型派生出子类型,实现方法对我来说并不重要。
-
好吧,如果您使用具有继承的类,您可以使用
instanceof进行比较。但是对于建筑,您需要例如创建一个工厂函数,将字符串映射到正确的子类。 -
如果您将此创建为答案,我会将其标记为正确。谢谢
标签: typescript types enums union-types