Javascript Typescript枚举比较';在';工作但不工作'===';

Javascript Typescript枚举比较';在';工作但不工作'===';,javascript,reactjs,typescript,enums,rxjs,Javascript,Reactjs,Typescript,Enums,Rxjs,我试图使用Enum从rxjs可观察对象获取安全事件输出。以下是完整的代码示例: // Enum export enum Key { ArrowUp = "ArrowUp", ArrowDown = "ArrowDown", ArrowLeft = "ArrowLeft", ArrowRight = "ArrowRight", W = "w", A = "a&quo

我试图使用Enum从rxjs可观察对象获取安全事件输出。以下是完整的代码示例:

// Enum
export enum Key {
  ArrowUp = "ArrowUp",
  ArrowDown = "ArrowDown",
  ArrowLeft = "ArrowLeft",
  ArrowRight = "ArrowRight",
  W = "w",
  A = "a",
  S = "s",
  D = "d",
  One = "1",
  Two = "2",
}
我的问题:
如何进行比较以使
key===key.One
成功?为什么比较失败了,但是中的成功了?

枚举在TypeScript中很有趣。它们基本上是键和值之间的映射。因此,当您传递
键时,您传递的是字符串
“One”
,但当您获得
键.One进行比较时,您得到的是字符串
“1”
。所以,
“One”==“1”
返回false,您就卡住了

执行
key in key
操作时,它会在
key
枚举中查找属性名
One
,并找到它,因此返回true。当然,这只是告诉您,
key
key
enum的成员,所以不是很有用

顺便说一句,正如你可能知道的,房产名被称为“钥匙”,但为了清楚起见,我放弃了双关语。但这很难做到

您可以做的是确保将
键的类型指定为
,以便TypeScript在请求时正确地将值映射到值。正如您所发现的,一种方法是将映射更改为:

Object.values(Key).find((v) => v === event.key) as Key

枚举在TypeScript中是很有趣的事情。它们基本上是键和值之间的映射。因此,当您传递
键时,您传递的是字符串
“One”
,但当您获得
键.One进行比较时,您得到的是字符串
“1”
。所以,
“One”==“1”
返回false,您就卡住了

执行
key in key
操作时,它会在
key
枚举中查找属性名
One
,并找到它,因此返回true。当然,这只是告诉您,
key
key
enum的成员,所以不是很有用

顺便说一句,正如你可能知道的,房产名被称为“钥匙”,但为了清楚起见,我放弃了双关语。但这很难做到

您可以做的是确保将
键的类型指定为
,以便TypeScript在请求时正确地将值映射到值。正如您所发现的,一种方法是将映射更改为:

Object.values(Key).find((v) => v === event.key) as Key

使用
console.Log(JSON.stringify(key))
记录
key
的值对
key.One执行相同操作。你应该看到区别。嘿,谢谢:)所以看起来我是在比较“键值”和“值值”,将映射更改为
Object.values(key)。查找((v)=>v==event.key)作为key
修复了它!继续并将其作为解决方案发布,我将批准它,否则我将通过EOD进行更新。再次感谢!使用
console.Log(JSON.stringify(key))
记录
key
的值对
key.One执行相同操作。你应该看到区别。嘿,谢谢:)所以看起来我是在比较“键值”和“值值”,将映射更改为
Object.values(key)。查找((v)=>v==event.key)作为key
修复了它!继续并将其作为解决方案发布,我将批准它,否则我将通过EOD进行更新。再次感谢!
// handler
const color = React.useRef<string>("black");
const setColor = React.useCallback((key: Key) => {
  if (key === Key.One) {
    color.current = "black";
  } else if (key === Key.Two) {
    color.current = "red";
  }
}, []);
key === Key.One false 
key in Key true
Object.values(Key).find((v) => v === event.key) as Key