用于Mixins和/或工厂功能的Intellisense JSDoc

时间:2017-05-16 03:40:55

标签: intellisense mixins factory-pattern jsdoc

我的问题

我目前正在使用最新版本的Visual Code Studio。我正在尝试使用intellisense来显示工厂函数创建的实例上的方法。这些方法将通过对象组合应用(因此直接作为对象的属性添加)。

所以充当构造函数的函数基本上返回:

function makeWrappedObj() {
  var obj = { /* random data */ }; // Then add methods to obj
  Object.keys(methods).forEach(key => a[key] = methods[key]; );
  return obj;
}
var methods = {
  /**
   * Yay documentation
   * @returns {Object}
   */
  method1: function() { return null; }
};
var instance = makeWrappedObj();
instance.method1( // What documentation to show up here
instance. // and here

是基本想法。 Here有人在做类似事情。我会在第三种可能的解决方案中解决这个问题。

我尝试过的解决方案

1) makeWrappedObj上的@class我认为只有在makeWrappedObj.prototype上附加方法时才有效,这不是我正在做的事情,因此无效。除非我误解了什么。

2) @namespace解决方案

/* @namespace ClassName */

/* @returns {ClassName}
function createWrappedObj() {
  var obj = { /* random data */ }; // Then add methods to obj
  Object.keys(methods).forEach(key => a[key] = methods[key]; );
  return obj;
}

var methods = {
/**
 * Currently the soultion I'm using
 * @memberof ClassName
 * @param {number} a
 **/
  method1: function (a)  {}
};
var instance = makeWrapperObj();
instance.method1( // Only shows documentation here

所以这种作品。这两个问题是:

    实例上的
  • 方法仅在您输入完整的instance.method(而不是instance.的情况下获取文档时才会获得文档 - 并不是什么大不了的事
  • 如果您的方法名称与内置函数相同,例如。 toString,instance.toString(将阻止您显示的任何文档,并显示本机toString默认文档instaed。

3) @typedef就像上面的链接一样。

/** Can be placed anywhere
 * @typedef {ClassName}
 * @property {function} method1
 * dunno how to document arguments with this method
 * but it gets the intellisense menu to pop up for "instance." after dot
 */

/* @returns {ClassName} */
function createdWrappedObject() {
  var obj = { /* random data */ }; // Then add methods to obj
  Object.keys(methods).forEach(key => a[key] = methods[key]; );
  return obj;
}

var methods = {
  method1: function (a)  {}
};
var instance = makeWrappedObj();
instance. // Yay
instance.method1( // Doesn't work

当一种类型instance.有一些缺点

时,有好处
  • 不知道如何指定传递给method1的参数。也许这是不可能的。
  • @typedef要求在其自己的注释块中指定所有文档。因此,我必须在方法和typedef
  • 的特定文档之间保持冗余 一旦你写出整个方法直到开放的paren,
  • 就会失去文档。有点可行......

注意:我愿意一个接一个地手动分配所有方法,而不是对方法mixin的所有键进行foreach。

另外我不知道如何指定传递的函数的参数。这应该是可能的,因为Array.map(为其函数调用指定了三个参数。

目标是当有人将其作为带有require的库导入时获取文档,或者只是将其作为库包含在浏览器端脚本中。

0 个答案:

没有答案