【问题标题】:Check if variable is a child type of type union检查变量是否是联合类型的子类型
【发布时间】: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


【解决方案1】:

没有什么可以阻止相同的值出现在多个“子”枚举中,因此没有逻辑方法可以推断这一点。此外,typeof 当用作这样的语句时,总是会给你'string'

另一种方法是使用具有继承的类,这样intanceof 可以用于比较。您可以使用将字符串映射到正确子类的工厂函数来创建实例。

【讨论】:

    猜你喜欢
    • 2023-01-24
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2015-05-24
    • 2019-05-26
    • 1970-01-01
    • 2020-08-04
    • 2011-08-25
    相关资源
    最近更新 更多