3

我正在创建一个用于谷歌应用程序脚本的库,并且在使用JSDoc 样式文档时遇到了一些问题,以便 IDE 自动完成功能适用于最终用户。

作为 User.prototype.METHODNAME 输入的所有方法都应显示在此库的自动完成中。目前只有 .getEmail() 方法出现在用户对象的自动完成中。.getName() .getPassword() .hasPaid() 等方法也应该出现,但不会出现。特别奇怪的是,当我交换 .getEmail() 和 .getId() 的方法名称(并且只有方法名称)时,IDE 仍然显示 .getEmail() 作为唯一选项,并运行原始的 .getId() 方法.

这是一个模拟库的库密钥,没有用于测试的敏感信息:M1TqnX8hyIa1H8ikAojXirsqqTKXVxxXC

/** 
*@param {Number} id
*@param {String} email
*@param {String} name
*@param {String} password
*@return {User} User
*/
function User(id, email, name, password){
  var ss = SpreadsheetApp.openById("INSERT SPREADSHEET HERE").getSheetByName("Users");
  var data = ss.getRange(1, 1, ss.getLastRow(), ss.getLastColumn()).getValues();
  for (var i = 1; i < data.length; i++){
    if (data[i][0] == id){
      this.id = id;
      this.email = data[i][1];
      this.name = data[i][2];
      this.password = data[i][3];
      this.picks = data[i][4];
      this.paid = data[i][5];   
    }
  }
  return this;
}
/**
* @param {Number} id ID of the user
* @return {User} User
*/
function getUserById(id){
  var user = new User(id, null, null, null);
  return user;
}
/**
* @param {String} email email of the user
* @param {String} name name of the user
* @return {User} User
*/
function getUserByEmailAndName(email, name){
  return new User(null, email, name, null);
}
/** 
*@return {Boolean} isCorrect
*/
User.prototype.checkPassword = function (password){ return this.password == Utilities.base64Encode(password); }

User.prototype.getEmail = function (){return this.email;}
/** 
*@return {Number} id 
*/
User.prototype.getId = function (){return this.id;}
/** 
*@return {String} name 
*/
User.prototype.getName = function (){return this.name;}
/** 
*@return {String} encodedPassword 
*/
User.prototype.getPassword = function (){return this.password;}
/** 
*@return {String} jsonPicks 
*/
User.prototype.getPicksAsString = function (){return this.picks;}
/** 
*@return {JSON} jsonPicks 
*/
User.prototype.getPicksAsJson = function (){return Utilities.jsonParse(this.picks);}
/** 
*@return {Boolean} hasPaid
*/
User.prototype.hasPaid = function (){return this.paid;}
4

2 回答 2

0

如果您正在使用 TypeScript - 或打算迁移到 - 我们已经构建了一个旨在帮助解决此问题的包:

https://github.com/maelcaldas/clasp-types

您可以使用它为我们的面向对象库和使用 Typescript 编写的客户端 API 生成自动完成功能。

于 2019-09-16T10:19:46.047 回答
-1

我认为自动完成功能仅适用于第一个库版本中的功能。所以我发现创建一个新的第一个库有点解决这个问题(但你现在必须自己保存你的版本)。

试试这个(这里的一切都是法语,但我会尝试翻译):

1)将您的项目复制到一个新项目(文件-创建副本)2)在这个新项目中创建一个新库(文件-管理版本)3)获取新项目库密钥(文件-项目属性)4)链接这个带有密钥的项目的新库(资源库)

于 2019-01-09T22:11:09.720 回答