我正在使用clasp,可让您使用打字稿开发Google Apps脚本。
在我的脚本中,我将Google表格转换为PDF的Blob,然后将其上传到Google云端硬盘。
代码运行良好,但是我无法正确使用Blob和BlobSource类型来保持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定义错误吗?
对于此问题的任何输入/正确的解决方法,将不胜感激。
答案 0 :(得分:1)
我们所需要的全部是从Class Blob
实现Interface BlobSource
。将the row替换为
export interface Blob extends BlobSource {
更新
DefinitelyTyped已更新 为此https://github.com/DefinitelyTyped/DefinitelyTyped/pull/36279