Я обновил свой проект с угловой 6 до угловой 7. В моем проекте есть компонент для загрузки файлов. Выдает ошибку компилятора после обновления.
onUpload() {
const fileReader = new FileReader();
fileReader.onload = () => this.uploadFile(fileReader.result);
fileReader.readAsText(this.fileToUpload);
}
uploadFile(fileContent: string) {
//upload
}
В приведенном выше коде this.uploadFile(fileReader.result)
выдает следующую ошибку.
ошибка TS2345: аргумент типа 'строка | ArrayBuffer 'не может быть назначен параметру типа' string '
Тип fileReader.result
- string | ArrayBuffer
string | ArrayBuffer
, и он говорит, что это не может быть присвоено string
. Как я могу преобразовать string | ArrayBuffer
Тип string | ArrayBuffer
для string
?
Хотя у result
есть возможность вернуть строку, он не может неявно привести ее к строке, так как существует риск потери данных. т.е. ArrayBuffer as string
может привести к усечению данных (придется проверить). Таким образом, вы должны явно привести его, чтобы сказать компилятору "я знаю, что я делаю".
2 подхода для достижения этой цели:
(string)fileReader.result;
fileReader.result as string;
Вам нужен typeguard, как это:
if (this.fileToUpload instanceof ArrayBuffer) {
// throw an error, 'cause you can't handle this
} else {
fileReader.readAsText(this.fileToUpload);
}
Вы можете использовать метод toString() для анализа результата:
const file = event.target.files[0];
reader.readAsDataURL(file);
const base64 = reader.result.toString().split(',')[1];
fileReader.result as string
?as string
. Пожалуйста, добавьте свой комментарий в качестве ответа.