类型 'void' 不能分配给类型 '((event: ChangeEvent<HTMLInputElement>) => void) React TypeScript

lyd*_*dal 4 javascript typescript reactjs tsx react-props

IM在阵营打字稿一个初学者,我已经定义了一些道具是一个.JS,我想在一个使用的文件.tsx文件。但我在我的 TypeScript 行之一上收到此错误:

 <MyTextField style={{width:'60%'}}  name='ActivationDate' type='date' defaultValue={values1.ActivationDate} onChange={handleChange('ActivationDate')}/>
Run Code Online (Sandbox Code Playgroud)
Type 'void' is not assignable to type '((event: ChangeEvent<HTMLInputElement>) => void) | ((event: ChangeEvent<HTMLSelectElement>) => void) | ((event: ChangeEvent<HTMLTextAreaElement>) => void) | undefined'.
Run Code Online (Sandbox Code Playgroud)

CodeSandbox 包含我的 JS 文件和 TSX 文件:https ://codesandbox.io/s/tsx-rj694

似乎是什么问题,我该如何正确编写?

wen*_*jun 7

我假设您没有将事件对象传递给handleChange方法。

这是您应该如何修改onChange事件处理程序:

onChange={() => handleChange('ActivationDate')}
Run Code Online (Sandbox Code Playgroud)

对于您的信息,如果您需要访问onChange调用中的事件对象,则需要明确指定正确的类型。

onChange={handleChange}
Run Code Online (Sandbox Code Playgroud)

当你定义函数时,

const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
  // do the rest here
}
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,我还必须为 `handleChange` 变量声明显式类型: `const handleChange : ChangeEventHandler = (event: ChangeEvent&lt;HTMLInputElement&gt;) =&gt; {}` (2认同)

小智 6

onChange={(e: React.ChangeEvent<HTMLInputElement>): void => handleChange(e.target.value)}
Run Code Online (Sandbox Code Playgroud)