我有一个使用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 {
这将满足类型定义要求。但是预期的用例是什么?
答案 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中做类似的事情,并讨论所涉及的问题。
据我所知,反应类型是同一核心理念的实现。