【问题标题】:Blob vs. Blob Source in Google Apps ScriptGoogle Apps 脚本中的 Blob 与 Blob 源
【发布时间】:2018-12-28 23:06:45
【问题描述】:

我正在使用 clasp,它可以让您在 typescript 中开发您的 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 定义的错误吗?

任何关于这里的问题/处理它的正确方法的意见将不胜感激。

【问题讨论】:

  • 您当然可以尝试修改您的本地 .d.ts 文件以反映 Blob 实现了 blobsource,并查看是否可以解决问题。如果是这样,请将您的 PR 提交给DefinitelyTyped repo 并为每个人修复它:)

标签: typescript google-apps-script blob


【解决方案1】:

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

export interface Blob extends BlobSource {

更新

DefinitelyTyped 已更新 对于这个https://github.com/DefinitelyTyped/DefinitelyTyped/pull/36279

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    相关资源
    最近更新 更多