输入'string | ArrayBuffer'不可分配给'string'类型

时间:2018-10-23 18:32:20

标签: javascript 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
}

我收到TypeScript错误:

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

2 个答案:

答案 0 :(得分:14)

错误消息说明了一切。

您声明string类型的csv变量。 然后,您将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() */}

答案 1 :(得分:0)

无论csvstring还是ArrayBuffer,这将始终输出字符串。

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