“string | ArrayBuffer”类型无法赋值给“string”类型。

46

读取 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'.

1
reader.result 强制转换为 string - callback
2个回答

69
错误信息已经说明了问题。
你声明了一个名为csv的字符串类型变量。然后你将string | ArrayBuffer类型(来自reader.result)分配给你刚刚分配的字符串类型。你不可以这样做。你只能将字符串分配给字符串。
因此,如果你100%确定reader.result包含字符串,那么你可以进行断言:
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() */}

5
你也可以直接使用 toString 方法,像这样:const csv = reader.result.toString()。它会自动处理所有内容,消除类型错误,并将结果转换为字符串。 - Nishant

4

无论 csv 是一个 string 还是一个 ArrayBuffer,它都会始终输出一个字符串。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接