【发布时间】:2018-12-28 23:06:45
【问题描述】:
我正在使用 clasp,它可以让您在 typescript 中开发您的 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 定义的错误吗?
任何关于这里的问题/处理它的正确方法的意见将不胜感激。
【问题讨论】:
-
您当然可以尝试修改您的本地
.d.ts文件以反映 Blob 实现了 blobsource,并查看是否可以解决问题。如果是这样,请将您的 PR 提交给DefinitelyTyped repo 并为每个人修复它:)
标签: typescript google-apps-script blob