输入'string | ArrayBuffer'不能赋值为'string'

Ara*_*orn 12 javascript arraybuffer typescript

从FileReader读取字符串的TypeScript错误

读取文件内容的简单代码:

const reader: FileReader = new FileReader();
       reader.readAsText(file);
       reader.onload = (e) => {
          const csv: string = reader.result; -> getting TS error on this line
}
Run Code Online (Sandbox Code Playgroud)

我得到TypeScript错误:

Type 'string | ArrayBuffer' is not assignable to type 'string'.
  Type 'ArrayBuffer' is not assignable to type 'string'.
Run Code Online (Sandbox Code Playgroud)

Nur*_*yev 25

错误消息说明了一切.

您声明了string一种csv变量.然后,您可以为刚刚分配的类型指定string | ArrayBuffer类型(of reader.result)string.你不能.你只能分配stringstring.

所以,如果你100%确定reader.result包含string你可以断言:

const csv: string = reader.result as string;
Run Code Online (Sandbox Code Playgroud)

但是,如果您不确定,请执行以下操作:

const csv: string | ArrayBuffer = reader.result;
// or simply:
const csv = reader.result; // `string | ArrayBuffer` type is inferred for you
Run Code Online (Sandbox Code Playgroud)

那你通常应该有一些检查:

if (typeof csv === 'string') {/*use csv*/}
else {/* use csv.toString() */}
Run Code Online (Sandbox Code Playgroud)

  • 您也可以像“const csv = reader.result.toString()”一样执行“toString”,它会处理所有事情,消除类型错误,并无论如何转换为字符串。 (5认同)

vil*_*393 5

无论是csvastring还是 an ,这将始终输出一个字符串ArrayBuffer

const csv: string = typeof csv === 'string' ? csv : Buffer.from(csv).toString()
Run Code Online (Sandbox Code Playgroud)