【发布时间】:2018-03-13 11:36:04
【问题描述】:
当我在我的事件处理程序中使用 MouseEvent 类型时,我无法构建我的 React/Typescript 应用程序:
private ButtonClickHandler(event: MouseEvent): void
{
...
}
我明白了:
error TS2322: Type '{ onClick: (event: MouseEvent) => void; children: string; }' is not assignable to type 'DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>'.
Type '{ onClick: (event: MouseEvent) => void; children: string; }' is not assignable to type 'ButtonHTMLAttributes<HTMLButtonElement>'.
Types of property 'onClick' are incompatible.
Type '(event: MouseEvent) => void' is not assignable to type 'EventHandler<MouseEvent<HTMLButtonElement>>'.
Types of parameters 'event' and 'event' are incompatible.
Type 'MouseEvent<HTMLButtonElement>' is not assignable to type 'MouseEvent'.
Property 'fromElement' is missing in type 'MouseEvent<HTMLButtonElement>'.`
我也尝试了MouseEvent<HTMLButtonElement>,但后来我得到了error TS2315: Type 'MouseEvent' is not generic.。
为什么?
摘自我的package.json:
"devDependencies": {
"@types/react": "^16.0.7",
"@types/react-dom": "^15.5.5",
"ts-loader": "^2.3.7",
"typescript": "^2.5.3",
"webpack": "^3.6.0"
},
"dependencies": {
"react": "^16.0.0",
"react-dom": "^16.0.0"
}
编辑#1:
绑定在render():
<button onClick={ this.ButtonClickHandler }>Toggle</button>
在constructor:
this.ButtonClickHandler = this.ButtonClickHandler.bind(this);
【问题讨论】:
-
你能告诉我们你把这个处理程序绑定到元素的代码吗?我认为这个问题可能有根本原因
-
你的意思是在渲染和构造函数中绑定?在编辑 #1 中添加
-
你试过
(event: React.MouseEvent<HTMLButtonElement>)吗? -
是的,同样的效果。其他人好像没有这样的问题:bennadel.com/blog/…
-
private ButtonClickHandler(event: React.MouseEvent<HtmlButtonElement>): void应该可以工作
标签: reactjs typescript