Вам необходимо явно указать TypeScript тип HTMLElement, который является вашей целью.
Способ сделать это - использовать общий тип, чтобы привести его к правильному типу:
this.countUpdate.emit((<HTMLTextAreaElement>e.target).value./*...*/)
или (как угодно)
this.countUpdate.emit((e.target as HTMLTextAreaElement).value./*...*/)
или (опять же, вопрос предпочтения)
const target = e.target as HTMLTextAreaElement;
this.countUpdate.emit(target.value./*...*/)
Это позволит TypeScript узнать, что это элемент, textarea
и узнать о свойстве value.
То же самое можно сделать с любым типом HTML-элемента: всякий раз, когда вы даете TypeScript немного больше информации об их типах, он окупается правильными подсказками и, конечно же, меньшим количеством ошибок.
Чтобы упростить задачу в будущем, вы можете напрямую определить событие с типом его цели:
// 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)">
Компонент:... this.url = event.target.result;
Когда - нибудь не работает , иногда нет, когда это не свойственно ошибаться ,error TS2339: Property 'result' does not exist on type 'EventTarget'
как вы предложили рассказать TS больше об этом, в том месте ,HTMLTextAreaElement
я пыталсяHTMLInputElement
тогдаtarget.value
не более ошибка, но изображение не отображается.