Angular 7 Зачем преобразовывать тело в строку JSON и в объект - PullRequest
0 голосов
/ 14 февраля 2019

Почему я должен преобразовать event.body в строку JSON и проанализировать обратно в объект?

this.excelFileService.upload(this.currentFileUpload).subscribe(event => {
      if (event.type === HttpEventType.UploadProgress) {
        this.progress.percentage = Math.round(100 * event.loaded / event.total);
      } else if (event instanceof HttpResponse) {
        let excelFile: ExcelFile = JSON.parse(JSON.stringify(event.body));
        this.excelFiles.push(excelFile);
      }      
    });

Если я непосредственно передам event.body в push, он не скомпилируется:

ERROR in src/app/excel-file/excel-file.component.ts(54,30): error TS2345: Argument of type '{}' is not assignable to parameter of type 'ExcelFile'.
  Type '{}' is missing the following properties from type 'ExcelFile': filename, path, createdAt

Если я передаю event.body[0], он компилируется, но это пустой объект {}.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Это потому, что JSON.parse возвращает any как тип, поэтому ошибка типа не возникает.Вам нужно определить тип event.body

let excelFile: ExcelFile = event.body as ExcelFile;

Таким образом, вы говорите компилятору TS: «Эй, я знаю, что эти данные имеют этот тип»

0 голосов
/ 14 февраля 2019

Типы не совместимы.Вместо этого используйте следующий код

const excelFile = event.body as ExcelFile;
...