模板化对象的JSDoc对象

时间:2015-05-20 21:09:05

标签: javascript documentation jsdoc

有没有办法松散地指定您要记录的对象内应该包含哪种类型的对象?

我希望记录以下内容:

var obj = {
  unknownName1: {
    name: "KnownValue"
  },
  unknownName2: {
    name: "KnownValue",
    offset: {
      x: 0,
      y: 0
    }
  },
  unknownName3: {
    name: "KnownValue",
    offset: {
      x: 0,
      y: 0
    },
    visible: true
  },
  unknownName4: {
    name: "KnownValue"
  }
};

子对象应具有以下属性:

/**
 * Example Object
 * @typedef myObject
 * @type {Object}
 * @property {String} name - Name of the templated object
 * @property {Number} [offset.x] - Offset X
 * @property {Number} [offset.y] - Offset Y
 * @property {Boolean} [visible] - Is Visible
 * @memberof com.namespace.MyClass 
 */

如果我想记录这个特定的obj,我会执行以下操作,但该对象将使用未知名称的对象以com.namespace.MyClass

的类型动态生成
/**
 * Object of Special Objects
 * @typedef mySpecialObjectOfObjects
 * @type {Object}
 * @property {com.namespace.MyClass.myObject} unknownName1
 * @property {com.namespace.MyClass.myObject} unknownName2
 * @property {com.namespace.MyClass.myObject} unknownName3
 * @property {com.namespace.MyClass.myObject} unknownName4
 * @memberof com.namespace.MyClass
 */

P.S。我只是在寻找可以使用的通配符@property,这样我的编辑器就可以帮助我记住对象中每个子对象的所有可用选项。

1 个答案:

答案 0 :(得分:0)

http://usejsdoc.org/tags-type.html,从JSDoc 3.2开始,JSDoc已完全支持Google Closure Compiler类型表达式。 http://usejsdoc.org/tags-type.html#jsdoc-types中描述了一种这样的格式:

{Object.<string, number>}

因此,您应该可以:

/**
 * Object of Special Objects
 * @typedef mySpecialObjectOfObjects
 * @type {Object.<string, com.namespace.MyClass.myObject>}
 * @memberof com.namespace.MyClass
 */

如果您想使用专门的类型来详细说明允许的字符串值,您甚至可以用自己的类型替换string