Свойство TypeScript 'forEach' не существует для типа 'FileList' - PullRequest
0 голосов
/ 30 мая 2018

Я даю пользователям возможность загружать несколько файлов.Затем мне нужно перебрать эти файлы и выполнить некоторые действия.Я хотел добавить некоторые дополнительные функции в FileList, но TS не знает forEach в FileList массивах.Это мой код:

public uploadMultiple(evt){
    console.log(evt.files);
    FileList.prototype.forEach = function(callback) {[].forEach.call(this, callback)};
}

Ответы [ 3 ]

0 голосов
/ 30 мая 2018
imagList: Array<any> = [];

uploadMultiple(event) {
        let reader = new FileReader();
        this.imagList.pop();
        if (event.target.files && event.target.files.length > 0) {
            for (var i = 0; i < event.target.files.length; i++) {
                this.imagList[i] = event.target.files[i];
            }
            var formData = new FormData();
            for (var i = 0; i < this.imagList.length; i++) {
            formData.append("File", <string>this.imagList[i]);
        }
        }
    } 

Вы можете попробовать это, это работает для меня.

0 голосов
/ 10 мая 2019

Вы никогда не должны изменять прототипы для типов!

FileList содержит length и item.Поэтому вместо использования forEach рассмотрите возможность использования цикла for.

for (var index = 0; index < files.length; ++index) {
    var file = files.item(index);
}

Для получения дополнительной информации посетите:

0 голосов
/ 30 мая 2018

Вам необходимо объявить дополнительные функции в интерфейсе FileList, прежде чем вы сможете назначить их.Вы можете сделать это с помощью объявления слияния.Если вы используете модульную систему, объединенный интерфейс должен быть объявлен в global:

declare global {
    interface FileList {
        forEach(callback: (f: File) => void) : void;
    }
}
FileList.prototype.forEach = function(callback) {  ... };
...