Введите строку | ArrayBuffer нельзя присвоить типу string

Ошибка TypeScript для чтения строки из FileReader

Простой код для чтения содержимого файла:

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

person Aragorn    schedule 23.10.2018    source источник
comment
преобразуйте reader.result в string.   -  person callback    schedule 23.10.2018


Ответы (2)


Сообщение об ошибке говорит само за себя.

Вы объявляете 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() */}
person Nurbol Alpysbayev    schedule 23.10.2018
comment
Вы также можете просто сделать toString в любом случае, например const csv = reader.result.toString(). Он позаботится обо всем, заглушит ошибку типа и все равно преобразует в строку. - person Nishant; 29.06.2020

Это всегда будет выводить строку независимо от того, является ли csv string или ArrayBuffer.

const csv: string = typeof csv === 'string' ? csv : Buffer.from(csv).toString()
person villy393    schedule 29.11.2019