Bạn cần phải cho TypeScript biết rõ ràng loại HTMLElement là mục tiêu của bạn.
Cách thực hiện là sử dụng kiểu chung để truyền nó thành kiểu thích hợp:
this.countUpdate.emit((<HTMLTextAreaElement>e.target).value./*...*/)
hoặc (tùy thích)
this.countUpdate.emit((e.target as HTMLTextAreaElement).value./*...*/)
hoặc (một lần nữa, vấn đề ưu tiên)
const target = e.target as HTMLTextAreaElement;
this.countUpdate.emit(target.value./*...*/)
Điều này sẽ cho TypeScript biết rằng phần tử là textarea
và nó sẽ biết thuộc tính giá trị.
Điều tương tự cũng có thể được thực hiện với bất kỳ loại phần tử HTML nào, bất cứ khi nào bạn cung cấp cho TypeScript thêm một chút thông tin về các loại của chúng, nó sẽ trả lại cho bạn những gợi ý thích hợp và tất nhiên là ít lỗi hơn.
Để giúp cho tương lai dễ dàng hơn, bạn có thể muốn xác định trực tiếp một sự kiện với loại mục tiêu của nó:
// 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)">
Thành phần:... this.url = event.target.result;
Đôi khi hoạt động đôi khi không, khi nó không lỗierror TS2339: Property 'result' does not exist on type 'EventTarget'
Như bạn đã đề xuất cho TS biết thêm về nó, tại nơiHTMLTextAreaElement
tôi đã thửHTMLInputElement
rồitarget.value
không còn nữa lỗi nhưng hình ảnh không hiển thị.