- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TL;DR Object.getPrototypeOf(e.target)
返回 HTMLInputElement
但编译器说类型是 EventTarget
长:我有一个简单的输入
<input
className="FilterInput"
type="text"
placeholder="Search for names..."
onKeyUp={filter}
/>
和一个管理过滤器的函数
const filter = (e: React.KeyboardEvent<HTMLInputElement>) => {
console.log(Object.getPrototypeOf(e.target)) // prints "HTMLInputElement"
console.log((e.target as HTMLInputElement).value);
// ... other code
}
我试图更好地理解 Typescript 类型管理背后的理论,但是我不明白为什么我必须使用类型提示
(e.target as HTMLInputElement).value
在第二个 console.log
中。
如果我不这样做,编译器(编译时)会说 Property 'value' does not exist on type 'EventTarget'.
。所以这意味着在编译时 e.target
的类型是 EventTarget。
但是,在使用 Object.getPrototypeOf(e.target)
进行测试时,类型为 HTMLInputElement
(具有 value
属性) .
为什么会这样?是我的代码中的错误、与 React 相关的错误还是我缺少的 Typescript 类型管理理论的某些部分?
而且,参数声明中泛型类型的指示(e: React.KeyboardEvent<HTMLInputElement>)不应该就够了吗?
谢谢
最佳答案
这个问题的答案实际上与 JS 和 DOM api 的关系比 Typescript 更相关。
简而言之,您真正想要的是 event.currentTarget
,因为它将是您附加监听器的实际元素。
event.target
可以是您元素的任何子元素。因为它可以是任何元素 - 它不能被安全地键入,所以它被键入为最低公分母,即 EventTarget
。 (但我会说我不确定为什么它是 EventTarget 而不是 Element
)
有关详细信息,请参阅此答案:What is the exact difference between currentTarget property and target property in JavaScript
关于reactjs - Typescript 和 React,React.KeyboardEvent<HTMLInputElement> 的编译时和运行时之间的不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72787673/
我正在练习 Java 脚本代码,但在实现此代码时遇到问题。 function f2(){ var a=document.getElementById("a"); var b=document.
我是 html5 和 javascript 的新手,正在使用 html5 和 javascript 编写一个简单的表单。当我在 netbeans 中按运行时,表单按预期显示在 chromo 中,但是当
我正在测试以查看当前获得焦点的元素是否是使用 document.activeElement 的输入。当它返回 [object HTMLInputElement] 时,所以我假设我可以使用下面的逻辑来测
我在 TypeScript 中使用 useRef 有问题。 我想输入它,但出现错误,如下所示: 我的容器组件是: const HeaderContainer: React.FC = () =>
export interface InputProps { type?: string; name?: string; value?: CommonTypeTuple;
仅供引用,我不是 JavaScript 忍者,但当我最近基于 Google map 做了很多事情时,我感觉自己会成为 JavaScript 忍者。 我实现了一张 map 。用户可以搜索谷歌地点并为其放
嗨,我是 Angular 和类型脚本的新手。我需要检查表格是否为空,并根据需要隐藏或显示 div。我试过了, var rows = document.getElementById('associate
JS代码 'use strict'; $(document).ready(function() { }); function change() { document.getElementByI
我正在尝试当文本字段具有焦点时,div 被选择为类:autocomplete,这是一个理解我的想法的例子,在我的真实问题比较复杂。我只需要在确定具有焦点的元素后,选择最近的 div 与 .autoco
DateFunction 在 ID 为 datelate 的文本输入中设置今天的日期。然后,日期作为 object HTMLInputElement 存储在 addLate 函数的 date 变量中。
我有以下 HTML 页面,我需要在其中将来自 HTMLInputElement 的输入值提供给 mine JavaScript 函数。 Mine! mine: function (inp
html代码 Date to Travel javascript代码 对我来说代码看起来很干净,但不知道其中有什么问题 window.onload = function() { docum
我刚开始学习 HTML。对我的一个变量执行 alert() 得到这个结果 [object HTMLInputElement]。 如何获取添加到文本字段中的数据,我的输入类型是文本? 最佳答案 假设您的
我正在遍历表格行中的单元格。每个单元格中都有一个文本框,我想获取文本框的值并将其推送到一个数组中。 function dothing() { var tds = $('#'+selec
我正在尝试从数组中获取输入 id,但不确定是否正确获取数据或出了什么问题,因为我需要获取 id 属性来进行一些操作。首先,我动态创建这个: $('').attr({ type :
我是phonegap的新手。我使用选择查询来显示存储的输入值。下面是我的数据库表。 function populateDB(tx) { tx.executeSql('CREATE TABLE IF N
在我的表单中,我想提供添加另一个位置的功能。当我只出现一个文本框(地址)并且可以显示多个地址文本框时,它正在工作。但现在我尝试添加“城市”文本框,但它不起作用。我以前使用过一个函数,现在我拆分了函数以
这段代码给了我 jquery 中的 objecxt.HTMLInputElement var values = $('input[name=delete]:checked').each(functio
我正在使用 html 和 jquery 开发一个网页。许多页面都有带有多种输入类型文本的表单。我正在尝试开发一个 jquery 函数来控制某些输入是否为空或错误。 我想将所有输入值放入一个数组中。当我
我正在传递隐藏值,并将其放入 JavaScript 函数中。我想将此值传递到另一个页面。在我打印它之前,它给了我 [object HTMLInputElement] $var4 = 1; echo "
我是一名优秀的程序员,十分优秀!