javascript - 在 TypeScript 2.0 中正确使用 React.Events?

标签 javascript node.js reactjs typescript

我有一个使用 React 和 TypeScript 的应用程序。我最近更新了我的类型定义,以使用 npm @types 命名空间将它们存储在我的 node_modules 文件夹中。

以前在使用 DOM 事件时,这样的方法签名满足类型定义:

public updateValue(e: React.FormEvent): void {

现在但是我得到了编译器错误:

(46,25): error TS2314: Generic type 'FormEvent<T>' requires 1 type argument(s).  

在查看 react type definitions 文件夹后,它确实接受了一个泛型:

interface FormEvent<T> extends SyntheticEvent<T> {
}

我的问题基本上是这个泛型的用例是什么,应该如何使用它以及它有什么优势?我可以简单地将我的方法更改为:

public updateValue(e: React.FormEvent<any>): void {

这将满足类型定义要求。但预期用例是什么?

最佳答案

通过阅读您链接的 react.d.ts 文件,通用参数似乎对应于 currentTarget 中指定的 HTMLElement。属性(property)。 Mozilla Docs将表明这通常是一个元素。

[currentTarget: EventTarget & T;]

T 保持未指定直到

interface ReactHTMLElement<T extends HTMLElement> extends DOMElement<HTMLAttributes<T>, T> {

这似乎支持 T 是一个元素的观点。我相信泛型的目标是能够访问 currentTarget 属性上的特定于元素的属性(例如,使用 HTMLImageElement 的 src 标记等)。有 an issue这建议在核心 lib.d.ts 中做一些类似的事情,并对所涉及的问题进行一些讨论。

据我所知,react 类型是同一核心思想的实现。

关于javascript - 在 TypeScript 2.0 中正确使用 React.Events?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077189/

相关文章:

javascript - 使用 new Array().fill(0) 创建二维数组错误?

JavaScript/NodeJS : Best way to find an specific object by id inside an array/collection of objects

javascript - Node.js 和 Express Rest api 创建自定义字段路由

ios - react native 信号 : duplicate error with Pods

javascript - Reactjs 滚动条从底部开始

javascript - 获取变量的所有初始值的最快方法是什么? JS

javascript - 未捕获的类型错误 : Object #<HTMLDocument> has no method 'getElementByID

javascript - 在滚动 div 中保留 x 行数

javascript - 如何在 ReactJS 中登录页面后重定向/转到用户配置文件

css - 从我使用 create-react-app 的 react 元素中删除 node-sass