Reputation: 5289
TypeScript error for reading string from FileReader
Simple code to read file contents:
const reader: FileReader = new FileReader();
reader.readAsText(file);
reader.onload = (e) => {
const csv: string = reader.result; -> getting TS error on this line
}
TypeScript error I get:
Type 'string | ArrayBuffer' is not assignable to type 'string'.
Type 'ArrayBuffer' is not assignable to type 'string'.
Upvotes: 51
Views: 52973
Reputation: 3063
This will always output a string regardless if csv
is a string
or an ArrayBuffer
.
const csv: string = typeof csv === 'string' ? csv : Buffer.from(csv).toString()
Upvotes: 6
Reputation: 21881
The error message says it all.
You declare a string
type of csv
variable.
You then assign string | ArrayBuffer
type (of reader.result
) to the string
type, you just assigned. You cannot. You only can assign string
to string
.
So, if you 100% sure that reader.result
contains string
you could assert this:
const csv: string = reader.result as string;
However if you are not sure, do this:
const csv: string | ArrayBuffer = reader.result;
// or simply:
const csv = reader.result; // `string | ArrayBuffer` type is inferred for you
Then you typically should have some check like:
if (typeof csv === 'string') {/*use csv*/}
else {/* use csv.toString() */}
Upvotes: 75