我正在尝试在客户端读取文件作为数组缓冲区。这是我的代码。
for (var index = 0; index < input.files.length;index++) {
let reader = new FileReader();
console.log(input.files[index].name);
reader.onload = () => {
var data:ArrayBuffer = reader.result;
console.log(data.toString().length);
}
reader.readAsArrayBuffer(input.files[index])
}
但是我的编辑器抱怨reader.result返回(字符串| ArrayBuffer)
但是,如果我从数据中删除类型类型。我无法使用ArrayBuffer特定的方法,例如byteLength。
如何强制reader.result为ArrayBuffer?
答案 0 :(得分:1)
你知道TS是很漂亮的xD。像平常那样编写代码,它将解释您的代码,一切都会滚动。
function foo() {
return (
Math.random() < 0.5
? "damn dis shit wild"
: new ArrayBuffer(1024)
)
}
let bar = foo(); // string | ArrayBuffer
if (bar instanceof ArrayBuffer) {
// bar is only ArrayBuffer in this block :O *.*
bar.byteLength; // <-- no error
} else {
bar.startsWith("damn") // <-- no error
}
这里是demo。我想这就是您想要的吗?
您还提到了“强制”,所以正常的断言也可以使用,但是不建议使用,因为如果bar
为string
,它会给运行时带来错误。
function foo() {
return (
Math.random() < 0.5
? "damn dis shit wild"
: new ArrayBuffer(1024)
)
}
let bar = <ArrayBuffer>foo();
bar.byteLength; // <-- no error