คุณต้องบอก 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 รู้ว่าองค์ประกอบคือ a textarea
และจะรู้ถึงคุณสมบัติค่า
สิ่งเดียวกันนี้สามารถทำได้กับองค์ประกอบ 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)">
Component:... this.url = event.target.result;
บางครั้งก็ใช้งานไม่ได้เมื่อมันไม่ผิดพลาดerror TS2339: Property 'result' does not exist on type 'EventTarget'
ตามที่คุณแนะนำบอก TS เพิ่มเติมเกี่ยวกับเรื่องนี้ในที่ที่HTMLTextAreaElement
ฉันพยายามHTMLInputElement
แล้วก็target.value
ไม่มาก ผิดพลาด แต่ภาพไม่แสดง