【问题标题】:Unable to do a union type involving multiple enums无法执行涉及多个枚举的联合类型
【发布时间】:2021-09-27 21:23:46
【问题描述】:

一个简单的例子:

export enum EnumA {
  A = 'a',
}

export enum EnumB {
  A = 'b',
}

export class SomeEntity {
  id: string;

  type: EnumA | EnumB;
}

const foo = (seArray: SomeEntity[]) => {
  seArray.forEach((se) => {
    Object.values(EnumA).includes(se.type)
  })
}

但我得到错误:

TS2345: Argument of type 'EnumA | EnumB' is not assignable to parameter of type 'EnumA'.   Type 'EnumB' is not assignable to type 'EnumA'.

看着ts docs,我不确定为什么会发生这种情况,因为 se.type 是它是联合类型的枚举之一的值。我缺少的枚举有什么特别之处吗?

【问题讨论】:

标签: angular typescript


【解决方案1】:

问题是 Typescript 不知道您打算让 Object.values(EnumA) 成为 EnumA 的数组 EnumB;它假设您希望它是一个仅包含 EnumAs 的数组,因此试图有用地指出 se.type 不存在。您可以通过为 Object.values(EnumA) 显式指定更广泛的类型来修复它,例如:

const foo = (seArray: SomeEntity[]) => {
  seArray.forEach((se) => {
    const values: (EnumA | EnumB)[]  = Object.values(EnumA);
    values.includes(se.type);
  })
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 2018-02-14
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多