我试图在客户端读取一个文件作为数组缓冲区。这是我的代码。
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返回(string | ArrayBuffer)
但是,如果我从数据中删除类型类型。我无法使用像byteLength这样的ArrayBuffer特定方法。
如何强制reader.result成为ArrayBuffer?
嗯,你知道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