如何在JavaScript中记录返回
我正在为浏览器应用程序的项目编写自己的库,在决定如何注释代码时遇到了同样的老问题 我试图遵循语法,但可能会继续这样做。我可能会在文档中使用两个@return和@returns标记,只是为了便于移植(当我设置文档的自动生成时) 现在,问题是,如何记录从函数返回的自定义匿名对象?例如:如何在JavaScript中记录返回,javascript,google-closure-compiler,jsdoc,code-documentation,Javascript,Google Closure Compiler,Jsdoc,Code Documentation,我正在为浏览器应用程序的项目编写自己的库,在决定如何注释代码时遇到了同样的老问题 我试图遵循语法,但可能会继续这样做。我可能会在文档中使用两个@return和@returns标记,只是为了便于移植(当我设置文档的自动生成时) 现在,问题是,如何记录从函数返回的自定义匿名对象?例如: return { username: 'username', password: 'password', enabled: true }; JsDoc有一个例子,说明了如何将@param记
return {
username: 'username',
password: 'password',
enabled: true
};
JsDoc有一个例子,说明了如何将@param记录为具有特定字段的对象,而不是@returns标记。类似地,记录类型的Google Closure编译器文档是模糊的,没有示例可以解决它。如果将其放在函数顶部
function myFunction() {
/**
* Description of my function
* @return {!Object.<string, string|boolean>} Returns an object containing username, password and enabled information
*/
// Do stuff
return {
username: 'username',
password: 'password',
enabled: true
}
}
函数myFunction(){
/**
*我的职能说明
*@return{!Object.}返回一个包含用户名、密码和启用信息的对象
*/
//做事
返回{
用户名:“用户名”,
密码:“password”,
已启用:true
}
}
闭包编译器使用了的一个子集(并添加了一些自己的)。有关完整的设置,请参见。JSDoc注释类似于JavaDoc注释,是以/**
开头的注释块(双星)。虽然注释的每一行通常都以自己的*
开头,但这是一种不需要的约定。每行只允许一个JSDoc标记,但标记的参数可以跨多行
注释通常应用于以下语句。以下是一些例子:
变量
类型转换
注意额外的括号
命名函数
函数表达式
定义类型
为了方便和可维护性,可以使用typedef对复杂类型(包括联合和记录类型)添加别名。这些注释可以很长,但为了便于阅读,可以拆分为多行
/** @typedef {{
* foo:string,
* bar:number,
* foobar:number|string
* }}
*/
var mytype;
对于最初的示例,有几种可能的方法可以注释这样的函数返回值。最具体、最方便的记录类型之一是:
/** @return {{username:string, password:string, enabled:boolean}} */
function() {
return {
username: 'username',
password: 'password',
enabled: true
}
}
注意额外的{}
。还要记住,记录类型不会阻止属性重命名
此注释告诉编译器该函数返回一个匿名类型,其中包含用户名
、密码
和已启用属性。其他有效选项是在别处定义接口,并将返回值类型转换为该接口。最不具体的注释是对象
或*
要查看各种可能的注释,请查看。一种很好的可移植方法如下,使用return作为关键字
如果您必须在多个位置使用它,那么您必须复制它,或者使用@typedef
,但我还不知道如何向@typedef
添加注释,因此我使用了如下内容
/**
* @typedef {username:string, password:string, enabled:boolean} MyType
*
* username: The name of the user
* password: Some password
* enabled: Is the user enabled?
*/
/**
* @return {MyType}
*/
function getObj () {
return {
username: 'username',
password: 'password',
enabled: true
};
}
您也可以尝试此处的建议返回类型为Object
。为什么你不简单地用几行来描述对象结构,就像你对参数所做的那样?请看@elusiver是的,我总是可以这样做的,关键是让编译器拥有它可以使用的信息,而不仅仅是供人阅读。或者,如果你喜欢这种记法的话,在函数之上。(我总是把它们放在里面,所以如果我对一个函数执行.toString(),我可以看到文档)我实际上在询问之前阅读了它,并且在过去使用过google闭包编译器。我仍然不清楚如何继续。想象一下,需要在多行中记录20个字段。我是否在每行的开头都加上星号(*)?更多测试正在进行中。编译器使用JSDoc注释。我将更新答案,使其更完整。@ChadKillingsworth你好,Chad,很抱歉打断了一个旧线程,但这在google闭包注释多行中得分很高。我正在研究如何使用@typedef注释复杂类型。注释不能分散在多行上(我认为),但它会使复杂的typedef更具可读性。例如,{{hands:number,walk:function(number):boolean,stop:function():boolean…和lots more…}
单个注释可以跨越多行。我为typedefs添加了一个示例。
/** @type {function(string):boolean} */
var foo = function(bar) { return true; }
var foo2 =
/**
* @param {string} bar
* @return {boolean}
*/
function(bar) { return true; }
/** @typedef {{
* foo:string,
* bar:number,
* foobar:number|string
* }}
*/
var mytype;
/** @return {{username:string, password:string, enabled:boolean}} */
function() {
return {
username: 'username',
password: 'password',
enabled: true
}
}
/**
* @return {object} return An object with the following properties
* @return {string} return.username Some username
* @return {string} return.password Some password
* @return {boolean} return.enabled Is the user enabled?
*/
function getObj () {
return {
username: 'username',
password: 'password',
enabled: true
};
}
/**
* @typedef {username:string, password:string, enabled:boolean} MyType
*
* username: The name of the user
* password: Some password
* enabled: Is the user enabled?
*/
/**
* @return {MyType}
*/
function getObj () {
return {
username: 'username',
password: 'password',
enabled: true
};
}