如何将Blob添加到Typescript?

时间:2019-07-03 04:35:54

标签: node.js typescript blob

我正在尝试使用FileSaver保存文件,因此需要Blob格式。我的应用程序是用打字稿编写的。

当我尝试做

import * as Blob from "blob";

我收到了错误

Could not find a declaration file for module 'blob'. '/Users/path/to/project/node_modules/blob/index.js' implicitly has an 'any' type.

Try \npm install @types/blob` if it exists or add a new declaration (.d.ts) file containing `declare module 'blob';``

我不能只导入'blob',因为@types/blob包不存在。

我用这些内容创建了一个声明文件blob.d.ts

declare module 'blob' {
  function Blob(blobParts[, options]): any
  export = Blob
}

基于MDN entry on the Blob constructor

这并不能解决我需要Blob用于的一行代码的问题

var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});

它返回了以下错误

Argument of type '{ type: string; }' is not assignable to parameter of type '[any, any]'. Object literal may only specify known properties, and 'type' does not exist in type '[any, any]'.

similar question不是重复的,它的答案也无济于事,因为该声明文件未声明模块且不导出任何内容。

1 个答案:

答案 0 :(得分:2)

在您的tsconfig.json中,确保在webworker数组中包含lib

{
  "compilerOptions": {
    ...
    "lib": ["webworker"],
    ...
  },
  ...
}

即使从上面提供的参考链接中应该已经很明显,lib.webworker.d.ts仍包含Blob和相关接口所必需的声明。

interface Blob {
    readonly size: number;
    readonly type: string;
    slice(start?: number, end?: number, contentType?: string): Blob;
}

declare var Blob: {
    prototype: Blob;
    new(blobParts?: BlobPart[], options?: BlobPropertyBag): Blob;
};