打字稿和处理FileReader

问题描述 投票:0回答:1

我试图在客户端读取一个文件作为数组缓冲区。这是我的代码。

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?

typescript
1个回答
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。我想这就是你想要的?

顺便提一句,你也提到了“强制”,所以正常的断言也会起作用,但不推荐使用,因为如果barstring,它会给出运行时错误。

function foo() {
    return (
        Math.random() < 0.5
            ? "damn dis shit wild"
            : new ArrayBuffer(1024)
    )
}

let bar = <ArrayBuffer>foo();
bar.byteLength; // <-- no error

Demo

© www.soinside.com 2019 - 2024. All rights reserved.