代码之家  ›  专栏  ›  技术社区  ›  Lahiru Chandima

更新到7后出错。“string | ArrayBuffer”类型的参数不能赋给“string”类型的参数

  •  1
  • Lahiru Chandima  · 技术社区  · 7 年前

    我将我的项目从angular6升级到angular7。我的项目中有一个文件上传组件。升级后会出现编译器错误。

    onUpload() {
        const fileReader = new FileReader();
        fileReader.onload = () => this.uploadFile(fileReader.result);
        fileReader.readAsText(this.fileToUpload);
    }
    
    uploadFile(fileContent: string) {
        //upload
    }
    

    this.uploadFile(fileReader.result) 给出以下错误。

    错误TS2345:类型为“string | ArrayBuffer”的参数无效

    fileReader.result 是 string | ArrayBuffer ,它说这不能分配给 string . 我如何转换 字符串|数组缓冲区 键入到a 一串

    3 回复  |  直到 7 年前
        1
  •  12
  •   Zze    7 年前

    result 有可能返回一个字符串,它不能隐式地将其转换为字符串,因为存在数据丢失的风险。即 ArrayBuffer as string 可能导致数据截断(必须进行测试)。因此,您必须显式地将其转换为告诉编译器“我知道我在做什么”。

    实现这一目标的两种方法是:

    (string)fileReader.result;
    fileReader.result as string;
    


        2
  •  3
  •   Michael Lorton    7 年前

    你需要一个 打字机 ,如下所示:

    if (this.fileToUpload instanceof ArrayBuffer) {
      // throw an error, 'cause you can't handle this
    } else {
        fileReader.readAsText(this.fileToUpload);
    }
    
        3
  •  1
  •   J C    7 年前

    您可以使用方法toString()来分析结果:

     const file = event.target.files[0];
     reader.readAsDataURL(file);
    
     const base64 = reader.result.toString().split(',')[1];
    
        4
  •  0
  •   gorums    7 年前

    fileReader.onload = () => this.uploadFile(<string>fileReader.result);
    
    推荐文章