在TypeScript 2.0中正确使用React.Events?
我有一个使用React和TypeScript的应用程序。 我最近更新了我的types定义,使用npm @types
命名空间将它们存储在我的node_modules
文件夹中。
以前在使用DOM Events时,像这样的方法签名符合types定义:
public updateValue(e: React.FormEvent): void {
现在,但是我得到编译器错误:
(46,25): error TS2314: Generic type 'FormEvent<T>' requires 1 type argument(s).
而在查看反应types定义文件夹后,它确实采取了一个通用的:
interface FormEvent<T> extends SyntheticEvent<T> { }
我的问题基本上是这个generics的用例是什么,它应该如何使用,它增加了什么优点? 我可以简单地将我的方法更改为:
public updateValue(e: React.FormEvent<any>): void {
这将满足types定义要求。 但是,预期的用例是什么?
通过阅读你已经链接的react.d.ts文件,看起来像通用参数对应于在currentTarget属性中指定的HTMLElement。 Mozilla Docs会指出这通常是一个元素。
[currentTarget: EventTarget & T;]
T依然未被指定
interface ReactHTMLElement<T extends HTMLElement> extends DOMElement<HTMLAttributes<T>, T> {
这似乎支持T是一个元素的想法。 我相信通用的目标是能够访问currentTarget属性上的特定于元素的属性(例如,使用HTMLImageElement
src标签等)。 有一个问题表明在核心lib.d.ts中做类似的事情,并讨论涉及的问题。
从我可以告诉的反应types是一个相同的核心思想的实现。