Website-Suche

TypeScript-Eigenschaft 'forEach' existiert nicht für den Typ 'FileList'


Ich ermögliche es den Benutzern, mehrere Dateien hochzuladen. Dann muss ich über diese Dateien iterieren und einige Aktionen ausführen. Ich wollte einige zusätzliche Funktionen zu FileList hinzufügen, aber TS kennt forEach bei FileList-Arrays nicht. Dies ist mein Code:

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

Antwort #1

FileList sollte nicht mit einem Array verwechselt werden. Die Liste ist ein Iterator mit weiteren Eigenschaften wie length und item.

Eine mögliche Lösung wäre, eine for-Schleife zu verwenden, die meiner Meinung nach der beste Weg ist, dies zu tun.

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

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

Antwort #2

Sie müssen die zusätzlichen Funktionen in der FileList-Schnittstelle deklarieren, bevor Sie sie zuweisen können. Sie können dies mithilfe von Deklarationszusammenführungen tun. Wenn Sie ein Modulsystem verwenden, muss die zusammengeführte Schnittstelle in global deklariert werden:

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

Verwandte Artikel