【问题标题】:How to force a type on FileReader result?如何在 FileReader 结果上强制输入类型?
【发布时间】:2021-11-10 21:47:50
【问题描述】:

我有一个将 PDF 转换为字符串的函数:

addFile = async (file: File): Promise<Observable<File>> =>  {
  console.log(await this.getBase64(file))
  const body = {
    document: (await this.getBase64(file)).split(',')[1]
  }
  return this.http.post<File>(parseDocumentUrl, body, httpOptions)
    .pipe(
      catchError(this.handleError)
    );
}

getBase64(file: File) {
  return new Promise<string>((resolve, reject) => {
      const reader = new FileReader();
      reader.readAsDataURL(file);
      reader.onload = ()  => resolve(reader.result);
      reader.onerror = error => reject(error);
  });
}

问题在于resolve(reader.result) 类型与getBase64 函数的promise 上的string 返回类型不兼容:

'string | 类型的参数数组缓冲区 | null' 不可分配给类型为“string |”的参数许诺”。 类型 'null' 不能分配给类型 'string | PromiseLike'。

我需要使用split 删除返回字符串的第一部分(data:application/pdf;base64,)。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    有一个简单的解决方法:

      getBase64(file: File) {
        return new Promise<string>((resolve, reject) => {
           const reader = new FileReader();
           reader.readAsDataURL(file);
           reader.onload = ()  => resolve(<string>reader.result);
           reader.onerror = error => reject(error);
        });
     }
    

    我已将read.result 的结果转换为string

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 2023-02-02
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 2019-01-13
      相关资源
      最近更新 更多