Anda perlu memberi tahu TypeScript secara eksplisit jenis HTMLElement yang merupakan target Anda.
Cara melakukannya adalah menggunakan tipe generik untuk mentransmisikannya ke tipe yang tepat:
this.countUpdate.emit((<HTMLTextAreaElement>e.target).value./*...*/)
atau (sesuka Anda)
this.countUpdate.emit((e.target as HTMLTextAreaElement).value./*...*/)
atau (sekali lagi, masalah preferensi)
const target = e.target as HTMLTextAreaElement;
this.countUpdate.emit(target.value./*...*/)
Ini akan memberi tahu TypeScript bahwa elemennya adalah a textarea
dan akan mengetahui properti nilai.
Hal yang sama dapat dilakukan dengan semua jenis elemen HTML, setiap kali Anda memberikan TypeScript sedikit lebih banyak informasi tentang jenisnya, Anda akan terbalas dengan petunjuk yang tepat dan tentu saja lebih sedikit kesalahan.
Untuk mempermudah masa depan, Anda mungkin ingin menentukan acara secara langsung dengan jenis targetnya:
// 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)">
Komponen:... this.url = event.target.result;
Kadang-kadang berfungsi kadang tidak, ketika tidak salah adalaherror TS2339: Property 'result' does not exist on type 'EventTarget'
Seperti yang Anda sarankan, beri tahu TS lebih lanjut tentang hal itu, di tempatHTMLTextAreaElement
saya mencobaHTMLInputElement
makatarget.value
tidak lagi err tapi gambar tidak ditampilkan.