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

时间:2016-10-17 01:07:06

标签: javascript node.js reactjs typescript

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

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

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

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

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

在查看react类型定义文件夹后,它确实采用了泛型:

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

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

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

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

1 个答案:

答案 0 :(得分:3)

通过阅读您已链接的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标记)。有an issue建议在核心lib.d.ts中做类似的事情,并讨论所涉及的问题。

据我所知,反应类型是同一核心理念的实现。