Javascript 类型';字符串| ArrayBuffer#x27;不可分配给类型';字符串';

Javascript 类型';字符串| ArrayBuffer#x27;不可分配给类型';字符串';,javascript,typescript,arraybuffer,Javascript,Typescript,Arraybuffer,从FileReader读取字符串时出现TypeScript错误 读取文件内容的简单代码: const reader: FileReader = new FileReader(); reader.readAsText(file); reader.onload = (e) => { const csv: string = reader.result; -> getting TS error on this line } 我得到的类型脚本错

从FileReader读取字符串时出现TypeScript错误

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

const reader: FileReader = new FileReader();
       reader.readAsText(file);
       reader.onload = (e) => {
          const csv: string = reader.result; -> getting TS error on this line
}
我得到的类型脚本错误:

Type 'string | ArrayBuffer' is not assignable to type 'string'.
  Type 'ArrayBuffer' is not assignable to type 'string'.

错误消息说明了一切

您可以声明
csv
变量的
string
类型。 然后将
string | ArrayBuffer
类型(属于
reader.result
)分配给刚才分配的
string
类型。你不能。您只能将
string
分配给
string

因此,如果您100%确定
reader.result
包含
string
,您可以断言:

const csv: string = reader.result as string;
但是,如果您不确定,请执行以下操作:

const csv: string | ArrayBuffer = reader.result;
// or simply:
const csv = reader.result; // `string | ArrayBuffer` type is inferred for you
然后您通常应该进行一些检查,如:

if (typeof csv === 'string') {/*use csv*/}
else {/* use csv.toString() */}

无论
csv
string
还是
ArrayBuffer
,这都将始终输出字符串

const csv:string=typeof csv=='string'?csv:Buffer.from(csv.toString())

reader.result
转换为
string
。您也可以像
const csv=reader.result.toString()
那样执行
toString
操作,它会处理所有问题,消除类型错误,并转换为字符串。