Google Apps脚本中的Blob与Blob源

时间:2018-12-28 23:06:46

标签: typescript google-apps-script blob

我正在使用clasp,可让您使用打字稿开发Google Apps脚本。

在我的脚本中,我将Google表格转换为PDF的Blob,然后将其上传到Google云端硬盘。

代码运行良好,但是我无法正确使用BlobBlobSource类型来保持TypeScript满意。

设置

我在文件开头声明了一些类型缩写:

type Sheet = GoogleAppsScript.Spreadsheet.Sheet;
type SS = GoogleAppsScript.Spreadsheet.Spreadsheet;
type GBlob = GoogleAppsScript.Base.Blob;
type GBlobSource = GoogleAppsScript.Base.BlobSource;

我有一个带有此签名的函数:

getPdfBlob(sheet: Sheet, pdfName: string): GBlob

我在代码中做了这样的事情:

var pdfBlob = getPdfBlob(mySheet, 'aPdfName');
var file = DriveApp.createFile(pdfBlob);

问题

我的IDE抱怨DriveApp.createFile想要类型BlobSource作为参数,而不是Blob

如果我尝试像这样将Blob转换为BlobSource:

var file = DriveApp.createFile(<GBlobSource>pdfBlob);

我的IDE抱怨:

  

将“ Blob”类型转换为“ BlobSource”类型可能是一个错误,因为这两个类型都无法充分重叠。如果这是故意的,请先将表达式转换为“未知”。

     

类型'Blob'中缺少属性'getBlob',但类型'BlobSource'中必需。

正如我所提到的,这种代码可以正常运行。我只想正确声明类型,以便TypeScript继续增加价值。

the documentation看来像Blob 实现 BlobSource,所以我不确定为什么我不能“向上转换”回BlobSource 。这可能是TypeScript定义错误吗?

对于此问题的任何输入/正确的解决方法,将不胜感激。

1 个答案:

答案 0 :(得分:1)

我们所需要的全部是从Class Blob实现Interface BlobSource。将the row替换为

export interface Blob extends BlobSource {

更新

DefinitelyTyped已更新  为此https://github.com/DefinitelyTyped/DefinitelyTyped/pull/36279