闭包编译器使用的一个子集JSDoc 注释 http://code.google.com/p/jsdoc-toolkit/(并添加了一些自己的)。请参阅编译器的注释参考 https://developers.google.com/closure/compiler/docs/js-for-compiler对于全套。 JSDoc 注释类似于 JavaDoc 注释,是一个注释块,开头为/**
(两颗星)。虽然注释的每一行通常都以其自己的开头*
,这是一个不需要的约定。每行只允许有一个 JSDoc 标记,但标记的参数可以跨越多行。
该注释通常适用于以下语句。这里有些例子:
Variable
/** @type {string} */ var a;
类型转换
var b = /** @type {string} */ (window['foo']);
注意额外的括号
命名函数
/**
* @param {string} bar
* @return {boolean}
*/
function foo(bar) { return true; }
函数表达式
/** @type {function(string):boolean} */
var foo = function(bar) { return true; }
var foo2 =
/**
* @param {string} bar
* @return {boolean}
*/
function(bar) { return true; }
Typedef
为了方便和可维护性,可以使用 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
}
}
注意额外的{}
。另请记住,记录类型不会阻止属性重命名。
该注释告诉编译器该函数返回一个匿名类型username
, password
and enabled
特性。其他有效的选项是在其他地方定义一个接口并将返回值类型转换为该接口。最不具体的注释是Object
or *
.
要查看各种可能的注释,请查看编译器项目中的 extern 文件 http://code.google.com/p/closure-compiler/source/browse/#svn/trunk/contrib/externs.