En mi reaccionar y aplicación mecanografiado, yo uso: onChange={(e) => data.motto = (e.target as any).value}.
¿Cómo defino correctamente los tipings para la clase, para que no tenga que hackear el sistema de tipos any?
export interface InputProps extends React.HTMLProps<Input> {
...
}
export class Input extends React.Component<InputProps, {}> {
}
Si pongo target: { value: string };me sale:
ERROR in [default] /react-onsenui.d.ts:87:18
Interface 'InputProps' incorrectly extends interface 'HTMLProps<Input>'.
Types of property 'target' are incompatible.
Type '{ value: string; }' is not assignable to type 'string'.
reactjs
typescript
types
typescript-typings
ojos salvajes
fuente
fuente

currentTarget. En ese caso sí, funciona, pero la pregunta era sobretargettargetincorrecto en la mayoría de los casos. Además, el objetivo no tieneTque obligarnos a escribir correctamenteReact.ChangeEvent<HTMLInputElement>lugar de un FormEvent.la forma correcta de usar en TypeScript es
Siga la clase completa, es mejor entender:
fuente
lib: ["dom"]acompilerOptionsentsconfig.jsonas HTMLInputElementfunciona para mifuente
Lo
targetque intentaste agregarInputPropsno es lo mismotargetque querías, que está enReact.FormEventEntonces, la solución que se me ocurrió fue, extender los tipos relacionados con eventos para agregar su tipo de destino, como:
Una vez que tenga esas clases, puede usar su componente de entrada como
sin errores de compilación. De hecho, también puede usar las dos primeras interfaces anteriores para sus otros componentes.
fuente
Por suerte, encuentro una solución. usted puede
y luego escribe código como:
e:ChangeEvent<HTMLInputElement>fuente
Aquí hay una manera con la desestructuración de objetos ES6, probada con TS 3.3.
Este ejemplo es para una entrada de texto.
fuente
Esto es cuando estás trabajando con un
FileListobjeto:fuente
Y asegúrese de tener
"lib": ["dom"]en sutsconfig.fuente
Cuando se usa Componente secundario Verificamos tipos como este.
Componente principal:
Componente hijo:
fuente
Una alternativa que aún no se ha mencionado es escribir la función onChange en lugar de los accesorios que recibe. Usando React.ChangeEventHandler:
fuente
Gracias @haind
Sí
HTMLInputElementtrabajado para el campo de entradaEsta
HTMLInputElementinterfaz se hereda de laHTMLElementcual se hereda desde elEventTargetnivel raíz. Por lo tanto, podemos afirmar que usar elasoperador para usar interfaces específicas de acuerdo con el contexto, como en este caso estamos usandoHTMLInputElementpara el campo de entrada, pueden ser otras interfacesHTMLButtonElement,HTMLImageElementetc.Para obtener más información, puede consultar otra interfaz disponible aquí
fuente