React 15 + Typescript:React.FormEvent<T> 类型不完整?

mas*_*onk 7 reactjs typescript-typings typescript2.0

textarea 表单的 onChange 属性需要一个React.EventHandler<React.FormEvent<HTMLTextAreaElement>>.

深入兔子洞,我们发现

interface EventHandler<E extends SyntheticEvent<any>> {
    (event: E): void;
}

type FormEventHandler<T> = EventHandler<FormEvent<T>>;

/* ... */

interface FormEvent<T> extends SyntheticEvent<T> {
}
Run Code Online (Sandbox Code Playgroud)

换句话说,onChange 只是需要一个接受 FormEvent 并返回 void 的函数,而 FormEvent 目前与 SyntheticEvent 相同。

问题在于SyntheticEvent<T>.target: EventTarget,并EventTarget没有定义value

我注意到还有currentTarget: EventTarget & T,其中 T 是HTMLTextInputArea,并且似乎已经定义了值。但表单处理页面显示 event.target正在查看,而不是event.currentTarget。有什么不同?我应该遵循打字还是文档?

编辑:我回答了我自己的问题。currentTarget是我将处理程序绑定到的元素,并且target是接收引发此事件的操作的元素。我想我总是想从 读取值currentTarget,所以在这种情况下,我认为打字引导我正确,而文档引导我错误。

Ben*_* B. 3

您的编辑是正确的。

这是一个简单的问题,但不幸的是,这个臭名昭著的currentTarget/target难题导致了一场有趣的 React 类型编辑战。React 文档使用的原因target是因为它对子元素没有影响,并且它们重视简单性,如下所示:

https://github.com/facebook/react/pull/9279

如果您需要更彻底的参考来使事情焕然一新,您可以阅读我对此主题的干预之一:

https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11508#issuecomment-256045682