type UpdateEntity = (state: (prevState: Readonly) => S) => void; export const extractEventValue = ( event: React.ChangeEvent ) => { switch (event.target.type) { case 'number': return event.target.valueAsNumber; case 'checkbox': return event.target.checked; default: return event.target.value; } }; export const updateValue = (updateEntity: UpdateEntity) => ( event: React.ChangeEvent ) => { updateEntity((prevState) => ({ ...prevState, [event.target.name]: extractEventValue(event) })); }; export const updateBooleanValue = (updateEntity: UpdateEntity) => ( name: string, value?: boolean ) => { updateEntity((prevState) => ({ ...prevState, [name]: value })); };