New Typescript 1.8.4 build error: " Build: Property 'result' does not exist on type 'EventTarget'. " New Typescript 1.8.4 build error: " Build: Property 'result' does not exist on type 'EventTarget'. " typescript typescript

New Typescript 1.8.4 build error: " Build: Property 'result' does not exist on type 'EventTarget'. "


Instead of using event.target.result, you can just use FileReader.result.

For example,

const fileReader: FileReader = new FileReader();fileReader.onload = (event: Event) => {   event.target.result; // This is invalid   fileReader.result; // This is valid};


While any is a medicine (almost for anything, but... where is the TypeScript benefit then)... there is a similar issue reported and nice (TypesScript-ish) workaround suggested

Request to change currentTarget in Event interface for lib.d.ts

let me cite:

I ran into this TS2339: Property 'result' does not exist on type 'EventTarget' in JS FileReader onload, and another warning for getSummary() on the event passed to FileReader's onerror.

My work-around, to suppress the horrid red squiggily lines;-) is the following:

interface FileReaderEventTarget extends EventTarget {    result:string}interface FileReaderEvent extends Event {    target: FileReaderEventTarget;    getMessage():string;}

Then in my app:

reader.onload = function(fre:FileReaderEvent) {    var data = JSON.parse(fre.target.result);    ...}

And, until some change in lib.d.ts, we still do work with known interface

EDIT Dec 2019:

With this fix, you might be getting

error TS2322: Type '(this: FileReader, e: FileReaderEvent) => void' is not assignable to type '(this: FileReader, ev: ProgressEvent) => any'.

If so, just replace

 interface FileReaderEvent extends Event {

with

 interface FileReaderEvent extends ProgressEvent {


With my old type script the parameter "imgsrc" is having any type by default.

So, now I made it as (imgsrc:any). It's working fine.

var reader:any,target:EventTarget;reader= new FileReader();reader.onload = function (imgsrc:any){var fileUrl = imgsrc.target.result;}