【问题标题】:How to type hint Google Types in Google Scripts Library?如何在谷歌脚本库中输入提示谷歌类型?
【发布时间】:2021-02-10 21:03:02
【问题描述】:

我问了一个question 并通过答案发现我没有问正确的问题!

假设LibraryFoo 是一个库,如果我在其他地方使用它作为库,我会得到类型完成。例如,如果我有

/**
 *  Lorem ipsum
 *
 *  @return {Object[]}
 *
 */
function bar() {}

LibraryFoo 中,如果在另一个 Google 脚本中我输入 LibraryFoo.bar().,我会收到有关 forEachmap 之类的数组的建议。但是,如果我有

/**
 *  Lorem ipsum
 *
 *  @return {Sheet}
 *
 */
function barring() {}

然后我输入 LibraryFoo.barring(). 我没有收到像 getRangegetMaxColumns 这样的建议。我知道使用 clasp 和本地 IDE 可能更有意义,但似乎是两种情况之一:

  1. 我使用了错误的名称/引用(尽管在键入 Google 自己的函数时,他们只是说“Sheet”。例如 SpreadsheetApp 的源代码是否可用?这可能是一个提示,或者不在正确的 GAS 中) .
  2. 这是不可能的,因为 Google 已经完成了我/我们无法做到的事情。

不管怎样,尽管搜索并尝试了不同的方法来命名 Sheet 引用,我还没有发现它是 1. 还是 2.(或其他东西!)。

[编辑:我已向 Google 发送了feature request,但仍不确定 1./2./ 中的哪一个]

【问题讨论】:

  • 这是关于只使用他的 Google Apps Script IDE 吗?是否考虑过使用其他 IDE?
  • @Rubén:是的,这是关于 Google Apps Script IDE 的。我已经考虑过了,但这必须(至少在基本级别)根据下一个人的要求轻松更新/调试,因为此代码由业余体育俱乐部使用
  • @Ruben:我不认为这是重复的,因为这是关于在特定类上获得 any 自动完成,但我们知道在这种情况下自动完成确实存在这个类,因为它在你例如输入SpreadsheetApp.getActiveSheet(). 之类的getRange
  • 您可能希望在 issuetracker 上创建功能请求,以让 Google 员工支持 Google 类型的 jsdoc 或提供您正在寻找的秘密 jsdoc 字符串。有关详细信息,请参阅tag info page

标签: google-apps-script libraries jsdoc


【解决方案1】:

考虑

目前无法在 Apps 脚本编辑器中实现。

Google Issuetracker 上有一些关于此的开放功能请求:

Support Object Oriented Interfaces with documentation for Libraries

Full jsdoc for classes and methods

还有一个 new feature request 作为讨论的结果提交 - 为它或上面提到的其他人加星标,以增加该功能很快实现的机会。

Google Apps 脚本不完全支持 JSDoc,并且自动完成功能不会比当前状态的顶级定义更进一步。这适用于自定义类和 SpreadsheetSheetRange 等内置类,因为此处的自动完成需要第二级迭代。

【讨论】:

  • 我没有使用类和方法,我使用的是裸函数,所以第一个链接在我所见的范围内不适用。
  • “这适用于自定义类和 Apps 脚本类,如电子表格、表格、范围,因为此处的自动完成需要第二级迭代。”二级迭代是什么意思?正如我在问题中所说,当我获取一个范围(例如SpreadsheetApp.getActiveSpreadsheet())然后键入一个点时,它会给我类型完成,那么这是如何发生的,第一次迭代而不是第二次迭代如何?
  • 您正在使用裸函数,但自动完成软件必须访问类定义以建议正确的方法。
【解决方案2】:

新的编辑器支持这个,语法示例如下:

/**
 *  Returns price list data from the Stock tab/sheet
 *
 *  @param {number} index 
 *  @return {SpreadsheetApp.Range}
 *
 */
function getRange() {
  return SpreadsheetApp.getActiveRange();
}

function foo() {
  getRange().
}

您将在 getRange(). 中的 . 之后完成 Range 对象。

如果函数来自库,这也可以。

【讨论】:

  • 你也可以输入提示变量吗?喜欢/** @var {SpreadsheetApp.Range} */ this.range = SpreadsheetApp.getActiveRange();
  • @SimonEast 我不清楚您的意思是“向变量添加注释以帮助 IDE 知道它是什么类型”,这似乎不起作用(使用您建议的语法),如果您的意思是,标签完成为this.range工作,知道它是SpreadsheetApp.Range,是的,这确实有效(并且在最后一个编辑器中也有效,这就是为什么缺少输入自己的函数的功能很烦人)。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多