Javascript 键入脚本如何覆盖onClick事件签名

Javascript 键入脚本如何覆盖onClick事件签名,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我有一个子组件,如下所示 从“React”导入React; 与olistrops的接口{ 项:{id:string;text:string}[]; buttonHandler:todoId:string=>void; } const TodoList:React.FC=props=>{ 回来 {props.items.maptodo=> {todo.text} 点击我 } ; }; 将默认值导出到列表; 将props.buttonHandler指定为期望todoId作为参数的函数,并期望butt

我有一个子组件,如下所示

从“React”导入React; 与olistrops的接口{ 项:{id:string;text:string}[]; buttonHandler:todoId:string=>void; } const TodoList:React.FC=props=>{ 回来 {props.items.maptodo=> {todo.text} 点击我 } ; }; 将默认值导出到列表; 将props.buttonHandler指定为期望todoId作为参数的函数,并期望buttonHandler从父级向下传递。我的父母正确地进行了类型检查,这非常有效

现在的问题是,我在这个组件上得到了以下错误

类型“todoId:string=>void”不可分配给类型“event:MouseEvent=>void”。 参数“todoId”和“event”的类型不兼容。 类型“MouseEvent”不可分配给类型“string”。ts2322

我该如何处理这个问题

我该如何处理这个问题

将正确的信息传递给buttonHandler。目前,您正在向其传递事件,而不是字符串

有几种方法可以做到这一点,例如包装器箭头函数:

<button onClick={() => props.buttonHandler(todo.id)}>CLICK ME</button>

你看到错误信息了吗?onClick回调实际上将使用事件对象而不是字符串来调用。你应该通过以下两种方式来处理它:1。传递接受事件的回调;或2。用类似{=>props.buttonHandlertodo.id}的东西包装它。