Javascript 闭包编译器参数类型对象。<;字符串,*>;不';t按预期工作

Javascript 闭包编译器参数类型对象。<;字符串,*>;不';t按预期工作,javascript,google-closure-compiler,Javascript,Google Closure Compiler,对可以作为函数参数通过对象的选项类型进行注释的正确方法是什么?例如: /** * test() function can receive all type of options. * @param {Object.<string, *>} options * @expose */ function test(options) { if(typeof options.set !== "undefined") { alert(options.set);

对可以作为函数参数通过对象的选项类型进行注释的正确方法是什么?例如:

/**
 * 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, []);
    }
}

只需创建一个新变量并将其设置为
@constructor
@expose
即可使用所有这些方法,如:

/**
 * @constructor
 */
var TestOptions = function() {
    /**
     * @type {Object.<string, *>}
     * @expose
     */
    this.set;

    /**
     * @type {function(... [*])}
     * @expose
     */
    this.callback;
};

TestOptions
将不会出现在
script.min.js
上,因为我从未在其上使用过
new

只需创建一个新变量并将其设置为
@constructor
@expose
使用所有这些方法,如:

/**
 * @constructor
 */
var TestOptions = function() {
    /**
     * @type {Object.<string, *>}
     * @expose
     */
    this.set;

    /**
     * @type {function(... [*])}
     * @expose
     */
    this.callback;
};
TestOptions
将不在
script.min.js
上,因为我从未在其上使用过
new

您可以使用:

您可以使用:


如果要精确指定每个选项,可以按如下方式执行:

/**
 * @param {{row: number, field: string, callback: function(string) }} options
 */

因此,您可以声明对象结构,包括类型、详细信息。

如果您想精确指定每个选项,可以这样做:

/**
 * @param {{row: number, field: string, callback: function(string) }} options
 */

因此,您可以声明对象结构,包括类型、详细信息。

您是否尝试过最简单的选项:
@param{*}options
?我想确切地指定每个选项是什么。我正在考虑使用
@接口
。正确的选择是将其完全定义为
接口
或其他类型,或者使用记录类型注释。这在很大程度上取决于选项的来源和创建方式。您是否尝试过最简单的选项:
@param{*}options
?我想确切地指定每个选项是什么。我正在考虑使用
@接口
。正确的选择是将其完全定义为
接口
或其他类型,或者使用记录类型注释。这在很大程度上取决于选项的来源和创建方式。哎哟,不要这样使用
@expose
。您将使所有重命名和死代码消除无效。对于我来说,这是至关重要的,因为我正在构建一个库。因此,我需要导出此名称,一旦该用户将其放在文档中。
@expose
现在已被弃用。作者应该迁移他们的代码以使用适当的
@export
@nocollapse
。哎哟,不要这样使用
@expose
。您将使所有重命名和死代码消除无效。对于我来说,这是至关重要的,因为我正在构建一个库。因此,我需要导出此名称,一旦该用户将其放在文档中。
@expose
现在已被弃用。作者应将其代码迁移到使用适当的
@export
@nocollapse
。正确-不要忘记记录类型选项仍将进行重命名。另外,可选参数通过包括“undefined”来声明在参数类型中。正确-不要忘记记录类型选项仍将进行重命名。另外,可选参数通过在参数类型中包含“undefined”来声明。
/**
 * test() function can receive all type of options.
 * @param {TestOptions} options
 * @expose
 */
function test(options) {
    /* ... */
}
@param {{set: Object, callback: function}} options
/**
 * @param {{row: number, field: string, callback: function(string) }} options
 */