首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为onChange等提供流注释的类型

为onChange等提供流注释的类型
EN

Stack Overflow用户
提问于 2017-07-17 02:26:21
回答 4查看 5.6K关注 0票数 9

我有以下组件:

代码语言:javascript
复制
import { identity } from 'lodash';

export const Input = ({
  onChange = identity
  //etc.
}: {
  onChange: Event<HTMLInputElement>,
}) => <Input onChange={onChange} />

但是当我运行flow时,我得到了这个错误:

代码语言:javascript
复制
onChange = identity,
       ^^^^^^^^^^^^^^^^^^^ default value. Expected polymorphic type instead of
onChange = identity,
       ^^^^^^^^ class type: Event

我不知道在哪里可以找到Event的定义。

如果我看看facebook的dom类型:

我可以在这里看到Event,它有一个EventTarget类型的target property

但看看EventTarget definition,我看不到任何价值的定义。

我不知道如何定义合成事件,让它有一个HtmlInputElement类型的目标。

EN

回答 4

Stack Overflow用户

发布于 2018-06-25 01:34:25

正如TLadd所说,SyntheticInputEvent就是您想要的参数。但是,它需要一个类型参数,所以您需要将其设置为SyntheticInputEvent<HTMLInputElement>

票数 15
EN

Stack Overflow用户

发布于 2017-07-18 01:07:14

我会看一看flow文档:

https://flow.org/en/docs/frameworks/react/#adding-types-for-react-events-a-classtoc-idtoc-adding-types-for-react-events-hreftoc-adding-types-for-react-eventsa

你会想要这样的东西:

代码语言:javascript
复制
class MyComponent extends React.Component {
  onChange(event: Event & { currentTarget: HTMLInputElement }) {
    // ...
  }
}
票数 7
EN

Stack Overflow用户

发布于 2017-07-17 07:36:46

Flow内置了合成事件的定义。在本例中,您需要的是SyntheticInputEvent (https://github.com/facebook/flow/blob/v0.49.1/lib/react.js#L310)

所以onChange的类型应该是

代码语言:javascript
复制
{ 
   onChange: (SyntheticInputEvent) => mixed,
}

一个接受SyntheticInputEvent并返回混合时间的函数,这基本上意味着您不关心该函数返回什么(如果有的话)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45132013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档