Búsqueda de sitios web

En React + TypeScript, ¿cómo puedo conocer directamente el 'tipo del objeto de evento' mediante la inferencia de tipos?


(VSCode)

Cuando desuno el evento del código jsx. (en la clase Component)

Como esto⬇

 handleSubmit = e => { ...}


render(){
return (
  <>
    <form onSubmit={this.handelSubmit}>
      <input
        ref={this.onRefInput}
        type='number'
        value={this.state.value}
        onChange={this.onChange}
      />
      <button>입력!</button>
    </form>
  </>
);}

Usualmente, cuando otros elevan el cursor sobre el "onSubmit"

tsc decir

"React.DOMAttributes< HTMLFormElement >onSubmit?:(evento: React.FormEvent< HTMLFormElement >)=> void) | indefinido "

introducir la descripción de la imagen aquí

¡Así que podemos conocer directamente el tipo del objeto del evento! (event: React.FormEvent)

✅ El problema es que mi código no anuncia como arriba.

Mi tsc dice

"React.DOMAttributes<HTMLFormElement>.onSubmit?: React.FormEventHandler<HTMLFormElement> | undefined"

¡Así que, no puedo conocer directamente el tipo del objeto evento!

Sé que hay muchas otras formas de conocer el tipo del objeto del evento.

¡Pero quiero saber directamente sobre el tipo del objeto del evento! mediante la inferencia de tipos.

📍¡Cómo puedo saber directamente sobre el tipo del objeto del evento! ¿por inferencia de tipo?

Respuesta #1

Puedes asignar un tipo ya sea a la función en sí o a los argumentos de la función, que es el evento.


React.FormEventHandler<HTMLFormElement>

Este es el tipo para la función. Si lo usas así:

handleSubmit: React.FormEventHandler<HTMLFormElement> = e => {
}

Entonces, el tipo de la variable e se inferirá automáticamente como React.FormEvent<HTMLFormElement>. Por lo tanto, en realidad no necesitas conocer el tipo de evento porque puedes aplicar un tipo a la función misma y obtener el tipo correcto.


O puedes asignar el tipo al argumento del evento e.

handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
}

Ahora el tipo para la propiedad handleSubmit se infiere como (e: React.FormEvent<HTMLFormElement>) => void.

Respuesta #2

De antemano, disculpa por eso. Esta respuesta no es una solución completa

Tuve el mismo problema, y busqué mucho, y traté de cambiar todos los settings.json sobre typescript.inlayHints. Desafortunadamente, nada funciona

Así que voy a la implementación de onSubmit

Si pasas el cursor sobre onSubmit con la tecla command (tal vez la tecla ctrl en otro sistema operativo) puedes ir a index.d.ts y entonces puedes ver

        onSubmit?: FormEventHandler<T> | undefined;

así que lo cambié como

        onSubmit?: (event: FormEvent<T>) => void | undefined;

y ahora puedo conseguir lo que quieres

Creo que la nueva versión de node_modules/@types/react/index.d.ts resulta como en la primera imagen.

Usar el tipo EventHandler también es una buena solución, si pasas el cursor sobre el parámetro e, puedes ver el Objeto Evento