typescript 类型“Event”上不存在属性“submitter”

1sbrub3j  于 2023-03-04  发布在  TypeScript
关注(0)|答案(1)|浏览(140)

在这件事上把我的头往墙上撞...
给定该函数

const handleFormSubmitByButton = (event: FormEvent<HTMLFormElement>) => {
  event.preventDefault();
  const submitter  = event.nativeEvent.submitter;
  
  console.log(submitter?.value)
};

和标记

<form onSubmit={handleFormSubmitByButton}>
  <button type="submit" name="test" value="test">Submit</button>
</form>

为什么我总是得到Property 'submitter' does not exist on type 'Event'.
我尝试使用React中的SyntheticEvent,如下所示:SyntheticEvent<HTMLFormElement, SubmitEvent>
这会导致submitter正常,但随后会抱怨Property 'value' does not exist on type 'HTMLElement'.
作为最后一个结果,我知道它不会工作,我也尝试在submitter的声明上进行类型转换。
项目中的TS版本为4.9.5

yqkkidmi

yqkkidmi1#

您需要添加保护子句:

const handleFormSubmitByButton = (event: FormEvent<HTMLFormElement>) => {
    event.preventDefault();

    if (!(event.nativeEvent instanceof SubmitEvent)) return;

    const submitter = event.nativeEvent.submitter;

    if (!(submitter instanceof HTMLInputElement)) return;

    console.log(submitter.value); // ok
};

Playground

相关问题