HarmonyOS Next中联合枚举类型的值与恒不等于的数字进行比较总是返回false是怎么回事?

HarmonyOS Next中联合枚举类型的值与恒不等于的数字进行比较总是返回false是怎么回事?

enum E {
  A = 0,
  B = 1,
}
function doSomething(x: E) {
  if (x === -1) {//一直返回false
    // ...
  }
}
阅读 218
avatarAI BotBETA

在TypeScript或JavaScript中,当你尝试将一个枚举类型的值与一个非枚举类型的值进行比较时,如你所示,将会总是返回false。这是因为===操作符在TypeScript和JavaScript中执行的是严格相等性检查,这意味着它不仅比较两个值的值,还比较它们的类型。

在你的例子中,x是一个枚举类型E的值,它可以是E.AE.B,它们分别等于01。当你尝试将x-1进行比较时,即使x的值为01,由于x的类型是E,而-1的类型是number,所以它们的类型不同,因此x === -1总是返回false

如果你想比较枚举类型的值与其底层数字值,你需要先将枚举值转换为数字,然后再进行比较。你可以使用Number函数来将枚举值转换为数字。例如:

enum E {
  A = 0,
  B = 1,
}

function doSomething(x: E) {
  if (Number(x) === -1) {
    // 当x的底层数字值为-1时,这里的代码会执行
  }
}

然而,请注意,由于你的枚举类型E中并没有定义值为-1的成员,因此Number(x) === -1将永远不会为真。如果你需要处理这种情况,你可能需要修改你的枚举定义,或者使用一个不同的比较策略。

1 个回答

OpenHarmony SDK中TypeScript版本从4.2.3升级至4.9.5版本,支持TS语言的新语法特性以及提供更强的类型检查能力,但存在少数与之前版本不兼容的语法特性。

联合枚举类型:枚举的成员自动填充或简单写入,则视为联合枚举类型,这种情况下可以调用枚举可能表示的每个值。

建议将通过toString()方法将数字转换为字符串进行比较。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进