191 votes

La propriété 'value' n'existe pas sur le type EventTarget en TypeScript

Donc le code suivant est en Angular 4 et je ne comprends pas pourquoi il ne fonctionne pas comme prévu.

Voici un extrait de mon gestionnaire:

onUpdatingServerName(event: Event) {
  console.log(event);
  this.newserverName = event.target.value; //ce ne fonctionnera pas
}

Élément HTML:

Le code me donne l'erreur:

La propriété 'value' n'existe pas sur le type 'EventTarget'.

Mais comme on peut le voir dans le console.log, la valeur existe sur event.target.

6 votes

Nous pouvons utiliser (e.target en tant que HTMLInputElement).value

0 votes

Bro, j'ai eu du mal avec ça pendant des heures, il suffit simplement de supprimer le type de la méthode. onUpdatingServerName(event);

3voto

Koustav Points 41

Dans le template -

`(keyup)="value2=$any($event.target).value"`

dans le composant -

getInput(event: Event) {
  this.value1 = (event.target as HTMLInputElement).value;
}

2voto

JillAndMe Points 134

Vous devriez utiliser la propriété event.target.value avec un gestionnaire onChange sinon vous pourriez voir :

index.js:1437 Avertissement: Échec de validation de la propriété : Vous avez fourni une propriété `value` à un champ de formulaire sans gestionnaire `onChange`. Cela rendra le champ en lecture seule. Si le champ doit être mutable, utilisez `defaultValue`. Sinon, définissez soit `onChange` soit `readOnly`.

Ou si vous souhaitez utiliser un autre gestionnaire que onChange, utilisez event.currentTarget.value

1 votes

Cela fonctionne pour moi mais je ne suis pas sûr que l'utilisation de event.currentTarget.value soit la meilleure approche.

1voto

shahidfoy Points 180

Vous pouvez également créer votre propre interface.

export interface UserEvent {
  target: HTMLInputElement;
}

   ...

onUpdatingServerName(event: UserEvent) {
  .....
}

0voto

Amit baderia Points 164

Vous pouvez le parser explicitement en "HTMLInputElement" et accéder ensuite à 'value'

onUpdatingServerName(event: Event) {
  console.log(event);
  this.newserverName = (event.target).value; 
}

0voto

Codemaker Points 639

Comme vous le savez, TypeScript a toujours été strictement basé sur le type de données de l'élément. Ainsi, vous ne pouvez pas accéder directement aux attributs d'un élément sans spécifier son type de données. L'event.target est un HTMLElement qui est le parent de tous les éléments HTML, mais qui n'est pas garanti d'avoir la propriété value.

Donc, nous devons convertir le type de la variable event.target pour pouvoir accéder à l'attribut value.

OnUpdatingServerName (event: Event) {
  console.log(event);
  var element = event.target as HTMLElement
  this.newserverName = element.value;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X