Property 'files' does not exist on type &#

2019-01-19 09:56发布

I am trying to access the value of the input file from my ionic 2 application but still I'm facing the issue of property files does not exist on type 'EventTarget'. As it is properly working in js but not in typescript. The code is given below:

  document.getElementById("customimage").onchange= function(e?) {
            var files: any = e.target.files[0]; 
              EXIF.getData(e.target.files[0], function() {
                  alert(EXIF.getTag(this,"GPSLatitude"));
              });
          }

Please help me solve this issue as it is not building my ionic 2 application.

3条回答
Summer. ? 凉城
2楼-- · 2019-01-19 10:29

The e.target property type depends on the element you are returning on getElementById(...). files is a property of input element: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement

In this case, the TypeScript compiler doesn't know you are returning an input element and we dont have an Event class specific for this. So, you can create one like the following code:

interface HTMLInputEvent extends Event {
    target: HTMLInputElement & EventTarget;
}

document.getElementById("customimage").onchange = function(e?: HTMLInputEvent) {
    let files: any = e.target.files[0]; 
    //...
}
查看更多
Rolldiameter
3楼-- · 2019-01-19 10:36

You can cast it as a HTMLInputElement:

document.getElementById("customimage").onchange= function(e: Event) {
    let file = (<HTMLInputElement>e.target).files[0];
    //rest of your code...
}
查看更多
啃猪蹄的小仙女
4楼-- · 2019-01-19 10:45

The simplest solution is to declare e as any

e.g

document.getElementById('customimage').onchange = (e: any) => {
    let files = e.target.files[0];
    ...
};

But you lose type information. A safer approach might be to declare your own FileEvent type based on https://developer.mozilla.org/en-US/docs/Web/API/FileReader/onload.

查看更多
登录 后发表回答