【问题标题】:Check string value in enum TypeScript检查枚举 TypeScript 中的字符串值
【发布时间】:2018-03-02 15:36:44
【问题描述】:

说有一个

enum ArrowKey{
  Up = "ArrowUp",
  Right = "ArrowRight",
  Down = "ArrowDown",
  Left = "ArrowLeft"
}

现在当收到带有e.key“ArrowUp”的KeyboardEvent 时,如何轻松检查该字符串值是否存在于枚举中?以及之后如何挑选出正确的枚举值?

【问题讨论】:

  • 为什么不用字典?
  • 因为我需要将枚举值传递给一个方法,并且该方法将有一个用于枚举的 switch 语句来确定下一步该做什么。当您的声誉如此之低时,请考虑不要投反对票...
  • 我不明白你到底想做什么。您可以直接将e.key 用于您的开关,因为当e.key === 'ArrowUp' 然后e.key === ArrowKey.Up。您甚至可以考虑使用 const 枚举。
  • 首先我想检查来自e.key的字符串值“ArrowUp”是否作为ArrowKey枚举中的枚举值存在。如果是这样,我想得到相应的枚举值 -> ArrowKey.up

标签: typescript enums


【解决方案1】:

以下函数将返回与按下的箭头键对应的枚举值,如果该键未在该枚举中定义,则返回 null。

getEnumValue(event): ArrowKey | null {
  const pressedKey = event.key;
  const keyEnum = Object.keys(ArrowKey).find(key => ArrowKey[key] === pressedKey);
  return ArrowKey[keyEnum] || null;
}

演示:https://stackblitz.com/edit/angular-dmqwyf?embed=1&file=app/app.component.html

EDIT:一行等效(ES 2017)

getEnumValue(event): ArrowKey | null {
  return Object.values(ArrowKey).includes(event.key) ? event.key : null;
}

【讨论】:

  • 鉴于event.key 将返回string 而不是ArrowKey,您可能需要对第二个建议进行类型转换
  • @jlogan 你是对的。应该是:getEnumValue(event): ArrowKey | null { return Object.values(ArrowKey).includes(event.key as ArrowKey) ? event.key : null; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
相关资源
最近更新 更多