对于In循环,Filelist返回错误的类型

时间:2018-02-22 12:52:41

标签: typescript filelist

我想使用 Typescript 循环使用for in循环的FileList。 我开始使用常规的旧for循环,这非常有效:

let files:FileList = e.target.files
for(let i = 0;i<files.length;i++){
  doSomething(files[i])
}

function doSomething(f:File){
}

但是当我使用较短的for..in循环时:

for(let f in files){
   doSomething(f) 
}

我收到错误:Argument of type 'string' is not assignable to parameter of type 'File'。所以f被认为是一个字符串,即使FileList包含Files而不是字符串。

这些修补程序无效:

for(let f:File in files){ // left hand assignment not allowed
    doSomething(f as File) // cannot convert string to File
} 

这是不可能的吗?

1 个答案:

答案 0 :(得分:2)

您无法使用

进行迭代
for(let f in files){
   doSomething(f) 
}
  

FileList不是一个数组,但它确实符合它的合同(有   长度和数字索引),所以我们可以&#34;借用&#34;数组方法:

你必须根据长度进行迭代。

您必须遵循此语法

for(let i = 0;i<files.length;i++){
  doSomething(files[i])
}

指api

https://developer.mozilla.org/en-US/docs/Web/API/FileList