注释我可以作为函数参数传递给对象的选项类型的正确方法是什么?例如:
/**
* test() function can receive all type of options.
* @param {Object.<string, *>} options
* @expose
*/
function test(options) {
if(typeof options.set !== "undefined") {
alert(options.set);
}
if(typeof options.callback !== "undefined") {
options.callback.apply(this, []);
}
}
我如何定义类似的东西......?
/**
* @param {Object.<string, *>} options
* @param {Object.<string, *>} options.set
* @param {function(... [*])} options.callback
*/
如果我什么都不做,编译器会返回如下错误:
script.js:28: WARNING - Property callback never defined on Object.<string, *>
options.callback.apply(this, []);
^
使用方法:
java -jar "compiler.jar"
--compilation_level ADVANCED_OPTIMIZATIONS
--warning_level VERBOSE
--js "script.js"
--js_output_file "script.min.js"
答案 0 :(得分:3)
您可以使用record type:
@param {{set: Object, callback: function}} options
答案 1 :(得分:2)
如果您想准确指定每个选项,可以这样做:
/**
* @param {{row: number, field: string, callback: function(string) }} options
*/
所以你可以声明对象结构,包括类型,细节是here。
答案 2 :(得分:-1)
只需要创建一个新变量并将其设置为@constructor
,@expose
所有这些方法,例如:
/**
* @constructor
*/
var TestOptions = function() {
/**
* @type {Object.<string, *>}
* @expose
*/
this.set;
/**
* @type {function(... [*])}
* @expose
*/
this.callback;
};
我只需要将其设置为@param
类型,例如:
/**
* test() function can receive all type of options.
* @param {TestOptions} options
* @expose
*/
function test(options) {
/* ... */
}
TestOptions
不会在script.min.js
上,因为我从未在其上使用new
。