Entonces, el siguiente código está en Angular 4 y no puedo entender por qué no funciona como se esperaba.
Aquí hay un fragmento de mi controlador:
onUpdatingServerName(event: Event) {
console.log(event);
this.newserverName = event.target.value; //this wont work
}
Elemento HTML:
<input type="text" class="form-control" (input)="onUpdatingServerName($event)">
El código me da el error:
La propiedad 'valor' no existe en el tipo 'EventTarget'.
Pero como se puede ver en el, console.logese valor existe en el event.target.

Respuestas:
event.targetaquí hay unHTMLElementque es el padre de todos los elementos HTML, pero no se garantiza que tenga la propiedadvalue. TypeScript detecta esto y arroja el error. Transmitirevent.targetal elemento HTML apropiado para asegurarse de que sea elHTMLInputElementque tenga unavaluepropiedad:Según la documentación :
(El énfasis es mío)
fuente
var element = ev.target as HTMLElementonFieldUpdate(event: { target: HTMLInputElement }) {en la función llamada. Vea mi respuesta a continuación.event.target as HtmlInputlementPasar HTMLInputElement como genérico al tipo de evento también debería funcionar:
fuente
onChangeembargo, esto no funcionará si se llama a la función desde, por ejemplo, una referencia de controlador de propiedad en el código de React. El controlador de reacción no espera que el tipo se establezca para React.ChangeEvent y mostrará un error de escritura. Tenía que volver a (una variante de) la respuesta seleccionada por el contrario, con un reparto:(event.target as HTMLInputElement).value.Aquí hay otra solución que funciona para mí:
(event.target as HTMLInputElement).valueEso debería eliminar el error al hacerle saber a TS que
event.targetes unHTMLInputElement, que inherentemente tiene unvalue. Antes de especificar, TS probablemente solo sabía queeventsolo era unHTMLInputElement, por lo tanto, según TS, el tecleadotargetera un valor mapeado aleatoriamente que podría ser cualquier cosa.fuente
Estaba buscando una solución a un error similar de TypeScript con React:
Quería llegar a
event.target.datasetun elemento de botón en el que se hizo clic en React:Así es como pude obtener el
datasetvalor para "existir" a través de TypeScript:fuente
onChange={(event: ChangeEvent<HTMLInputElement>): void => { setTextFilter(event.target.value); }}Debería usar
event.target.valueprop con el controlador onChange si no puede ver:O si desea utilizar otro controlador que no sea onChange, utilice
event.currentTarget.valuefuente
event.currentTarget.valuesea el mejor enfoque.La forma en que lo hago es la siguiente (mejor que la afirmación de tipo en mi humilde opinión):
Esto supone que solo está interesado en la
targetpropiedad, que es el caso más común. Si necesita acceder a las otras propiedades deevent, una solución más completa implica el uso del&operador de intersección de tipo:Esta es una versión de Vue.js, pero el concepto se aplica a todos los marcos. Obviamente, puede ir más específico y en lugar de usar un general
HTMLInputElementpuede usar, por ejemplo,HTMLTextAreaElementpara áreas de texto.fuente