javascript - tutorial - install angular 2
La propiedad ''valor'' no existe en el tipo EventTarget en TypeScript (4)
Aquí hay otra solución que me funciona:
(event.target as HTMLInputElement).value
Eso debería eliminar el error al
event.target
TS que
event.target
es un
HTMLInputElement
, que tiene un
value
inherente.
Antes de especificar, TS probablemente solo sabía que ese
event
solo era un
HTMLInputElement
, por lo tanto, según TS, el
target
ingresado era un valor asignado al azar que podría ser cualquier cosa.
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
console.log
ese valor existe en
event.target
.
Estaba buscando una solución a un error similar de TypeScript:
La propiedad ''conjunto de datos'' no existe en el tipo EventTarget en TypeScript
Quería llegar a
event.target.dataset
de un elemento de botón en React:
<button
onClick={onClickHandler}
data-index="4"
data-name="Foo Bar"
>
Delete Candidate
</button>
Así es como pude hacer que el valor del
dataset
"existiera" a través de TypeScript:
const onClickHandler = (event: React.MouseEvent<HTMLButtonElement>) => {
const { name, index } = (event.target as HTMLButtonElement).dataset
console.log({ name, index })
// do stuff with name and index…
}
Pasar HTMLInputElement como genérico al tipo de evento también debería funcionar:
onUpdatingServerName(event: React.ChangeEvent<HTMLInputElement>) {
console.log(event);
this.newserverName = event.target.value;
}
event.target
aquí es un elemento
HTMLElement
que es el padre de todos los elementos HTML, pero no se garantiza que tenga el
value
la propiedad.
TypeScript detecta esto y arroja el error.
Transmita
event.target
al elemento HTML adecuado para asegurarse de que sea
HTMLInputElement
que tenga una propiedad de
value
:
(<HTMLInputElement>event.target).value
Por la documentación :
Escriba el
$event
El ejemplo anterior convierte el
$event
comoany
tipo. Eso simplifica el código a un costo. No hay información de tipo que pueda revelar propiedades del objeto de evento y evitar errores tontos.[...]
El
$event
ahora es un$event
KeyboardEvent
específico. No todos los elementos tienen una propiedad devalue
, por lo que convierte eltarget
en un elemento de entrada.
(El énfasis es mío)