javascript - 在一个函数中同时处理 React.KeyboardEvent 或 React.MouseEvent

标签 javascript reactjs typescript types

我正在尝试获得一个函数来处理点击和键盘事件,因为我正在尝试使我的网络应用程序键盘可访问。当我对类型使用 | 符号时,出现错误:

Property 'key' does not exist on type 'KeyboardEvent<Element> | MouseEvent<Element, MouseEvent>'.
  Property 'key' does not exist on type 'MouseEvent<Element, MouseEvent>'.

我目前的职能:

const handleChange = (e: React.KeyboardEvent | React.MouseEvent): void => {
  if (e.type !== 'mousedown' || e.key !== ' ') return;

  ...other stuff...
}

有人可以指出正确的方向让我按预期工作吗?我可以只编写单独的函数,但我认为将它保留在一个函数中会很好。

最佳答案

您可以使用类型断言来执行此操作 (https://basarat.gitbook.io/typescript/type-system/type-assertion):

const handleChange = (e: React.KeyboardEvent | React.MouseEvent): void => {
  if (e.type !== 'mousedown' || (e as React.KeyboardEvent).key !== ' ') return;

  ...other stuff...
}

关于javascript - 在一个函数中同时处理 React.KeyboardEvent 或 React.MouseEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65928720/

相关文章:

javascript - 我可以使用 JavaScript 调用 native HTML5 输入工具提示吗?

javascript - 将新 Prop 合并到状态中的正确方法

javascript - browserify 使用 react-router 加载 ReactJS 两次

node.js - 即使在建立 Websocket 之后,Socket IO 仍保持(重新?)连接

typescript - 采取受歧视工会的补充

javascript - 如何使用 firebase 身份验证在用户注册过程中保存额外信息

javascript - javascript new Date(timestamp) 是否根据客户端时区返回日期?

node.js - 在类型上找不到参数类型为 'string'的索引签名

typescript - 如何在 Docker 容器内的 NestJs 应用程序中观察文件更改

javascript - GTM 和 Analytics.js