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 sobretarget
target
incorrecto en la mayoría de los casos. Además, el objetivo no tieneT
que 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"]
acompilerOptions
entsconfig.json
as HTMLInputElement
funciona para mifuente
Lo
target
que intentaste agregarInputProps
no es lo mismotarget
que querías, que está enReact.FormEvent
Entonces, 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
FileList
objeto: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í
HTMLInputElement
trabajado para el campo de entradaEsta
HTMLInputElement
interfaz se hereda de laHTMLElement
cual se hereda desde elEventTarget
nivel raíz. Por lo tanto, podemos afirmar que usar elas
operador para usar interfaces específicas de acuerdo con el contexto, como en este caso estamos usandoHTMLInputElement
para el campo de entrada, pueden ser otras interfacesHTMLButtonElement
,HTMLImageElement
etc.Para obtener más información, puede consultar otra interfaz disponible aquí
fuente