【问题标题】:Adding sub-properties to an existing property-list in jsdoc将子属性添加到 jsdoc 中的现有属性列表
【发布时间】:2013-10-01 10:14:03
【问题描述】:

我正在尝试自动化我们的 JS 库中的一个特定模块,并且卡在我想要定义一组属性的点上(比如说一个作为类的构造参数的对象)。

/**
 * This function initiates world peace!
 * @constructor
 * @param {object}  defaults        - The options to initiate peace.
 * @param {number}  defaults.issues - The number of issues being taken up.
 * @param {string}  defaults.source - The name of the location where process starts.
 */
 var WorldPeace = function (defaults) {
     // code here
 };

如果建筑的所有属性都在一个位置定义,那就太好了。不幸的是,我的代码有许多模块有助于构建属性。比方说,在代码的其他部分(在以后的文件中)导致有几个属性

 * @param {Date} defaults.start  - The date when the process started.
 * @param {Date} defaults.stop   - The date when the process should stop.

如何添加到我之前为WorldPeace 函数定义的原始属性集?做一些类似 mixin 或子类化属性的事情会过火!因此,如果我可以简单地注入到属性列表定义中,那就太好了。

【问题讨论】:

    标签: javascript google-closure-compiler google-closure jsdoc code-documentation


    【解决方案1】:

    最简单的方法是使用记录类型:

    /**
     * This function initiates world peace!
     * @constructor
     * @param {{issues: number, source: string}} defaults - options to initiate peace.
     */
    var WorldPeace = function (defaults) {
      // code here
    };
    

    你也可以实现一个接口:

    /** @interface */
    var WordPeaceDefaults;
    
    /** @type {number} */
    WorldPeaceDefaults.prototype.issues;
    
    /** @type {string} */
    WorldPeaceDefaults.prototype.source;
    
    /**
     * This function initiates world peace!
     * @constructor
     * @param {WorldPeaceDefaults} defaults - options to initiate peace.
     */
    var WorldPeace = function (defaults) {
      // code here
    };
    
    /**
     * @constructor
     * @implements {WorldPeaceDefaults}
     */
    function MyWorldPeaceDefaults() {}
    
    /** @type {number} */
    MyWorldPeaceDefaults.prototype.issues = 0;
    
    /** @type {string} */
    MyWorldPeaceDefaults.prototype.source = '';
    
    WordPeace(new MyWorldPeaceDefaults);
    

    【讨论】:

    • 接口在技术上是正确的——但它会再次被记录在远离功能的地方——就像我之前提到的那样,太过分了。我仍然会看看它是否会产生比我以前做的更好的东西! :-)
    • 接口方式记录事物的方式与类类似,因此与文档“过分”,我只是希望它像枚举器或属性列表一样简单地列出。 :(
    【解决方案2】:

    另一种方法是使用 typedef:

    /** 
     * @typedef {{
     *   issues: number,
     *   source: string
     * }}
     */
    var WorldPeaceOptions;
    
    /**
     * @constructor
     * @param {WorldPeaceOptions} defaults
     */
    var WorldPeace = function (defaults) {
      // code here
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多