javascript - Att ge HTML-formulär till FormData genom event.target ger felet Argument of type 'EventTarget' is not assignable to parameter of type 'HTMLFormElement'
Jag försöker få värdena från ett form till FormData:
const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
e.preventDefault();
const formData = new FormData(e.target as HTMLFormElement);
const value = formData.get('origin') ? 'open' : 'on';
updateResizingOptionsQuery.mutate({ value });
};
Eftersom React skickar SynteticEvents passar inte gränssnittet för e.target med FormData-konstruktören. I exemplet gör jag en typomvandling, vilket inte är idealiskt. Vad skulle vara en bättre version av den koden?
Utan typomvandling kastas detta lint-fel:
Argument av typen 'EventTarget' kan inte tilldelas en parameter av typen 'HTMLFormElement'. Typen 'EventTarget' saknar följande egenskaper från typen 'HTMLFormElement': acceptCharset, action, autocomplete, elements, och 297 till.
Svar #1
Att använda e.currentTarget istället för e.target fungerar. Eftersom currentTarget alltid refererar till det element som har händelselyssnaren, vet TypeScript att det är <form>:
import { FormEvent } from "react";
export default function App() {
const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
e.preventDefault();
const formData = new FormData(e.currentTarget);
const value = formData.get("origin") ? "open" : "on";
updateResizingOptionsQuery.mutate({ value });
};
return (
<div className="App">
<form onSubmit={handleSubmit}></form>
</div>
);
}