类型“ArrayBuffer”上不存在属性“substring”。ts(2339)

mig*_*ton 0 typescript angular

我将 Angular 6 更新为 Angular 8。一切似乎都正常。除了一件事。

我用谷歌搜索了这个:属性“substring”在类型“ArrayBuffer”.ts(2339)上不存在。但没有得到满意的答复

所以我有这个:

 const base64Img = fileReader.result.substring( fileReader.result.indexOf( ',' ) + 1 );
Run Code Online (Sandbox Code Playgroud)

结果属性如下所示:

readonly result: string | ArrayBuffer | null;
Run Code Online (Sandbox Code Playgroud)

但现在我得到这个错误:

Property 'substring' does not exist on type 'string | ArrayBuffer'.
  Property 'substring' does not exist on type 'ArrayBuffer'.ts(2339)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:如何解决这个问题?

谢谢

你不会再遇到编译器错误

整个函数如下所示:

 loadImage( event: Event ) {
    const fileInput = event.target as HTMLInputElement;
    this.selectedFileName = fileInput.files[ 0 ].name;
    if ( fileInput.files[ 0 ] ) {
      const fileReader = new FileReader();
      fileReader.addEventListener( 'load', () => {
        const base64Img = fileReader.result.substring( fileReader.result.indexOf( ',' ) + 1 );
        this.form.controls.picture.setValue( base64Img );
        this.form.controls.uploadPicture.setValue( true );
      } );
      fileReader.readAsDataURL( fileInput.files[ 0 ] );
    } else {
      this.form.controls.picture.setValue( this.profile.picture );
      this.form.controls.uploadPicture.setValue( false );
    }
  }
Run Code Online (Sandbox Code Playgroud)

abd*_*995 5

您可以通过类型转换result为字符串类型来完成此操作。

  const base64Img = (fileReader.result as string).substring((fileReader.result as string).indexOf( ',' ) + 1 );
Run Code Online (Sandbox Code Playgroud)