Vous devez indiquer explicitement à TypeScript le type de HTMLElement qui est votre cible.
La façon de le faire consiste à utiliser un type générique pour le convertir en un type approprié:
this.countUpdate.emit((<HTMLTextAreaElement>e.target).value./*...*/)
ou (comme vous le souhaitez)
this.countUpdate.emit((e.target as HTMLTextAreaElement).value./*...*/)
ou (encore une fois, question de préférence)
const target = e.target as HTMLTextAreaElement;
this.countUpdate.emit(target.value./*...*/)
Cela permettra à TypeScript de savoir que l'élément est a textarea
et de connaître la propriété value.
La même chose pourrait être faite avec n'importe quel type d'élément HTML, chaque fois que vous donnez à TypeScript un peu plus d'informations sur leurs types, cela vous paie avec des conseils appropriés et bien sûr moins d'erreurs.
Pour vous faciliter la tâche dans le futur, vous souhaiterez peut-être définir directement un événement avec le type de sa cible:
// create a new type HTMLElementEvent that has a target of type you pass
// type T must be a HTMLElement (e.g. HTMLTextAreaElement extends HTMLElement)
type HTMLElementEvent<T extends HTMLElement> = Event & {
target: T;
// probably you might want to add the currentTarget as well
// currentTarget: T;
}
// use it instead of Event
let e: HTMLElementEvent<HTMLTextAreaElement>;
console.log(e.target.value);
// or in the context of the given example
emitWordCount(e: HTMLElementEvent<HTMLTextAreaElement>) {
this.countUpdate.emit(e.target.value);
}
<img [src]="url"> <br/> <input type='file' (change)="showImg($event)">
Component:... this.url = event.target.result;
Parfois, ça marche parfois pas, quand ce n'est pas une erreur,error TS2339: Property 'result' does not exist on type 'EventTarget'
comme vous l'avez suggéré, dites-en plus à TS, à l'endroit oùHTMLTextAreaElement
j'ai essayé,HTMLInputElement
alorstarget.value
plus err mais l'image ne s'affiche pas.