文档中JSDOC一般类型参数(Document generic type parameters in

2019-08-31 06:54发布

在JSDoc存在记录的确切类型的数组的内容的可能性这样的 :

/** @param {Array.<MyClass>} myClasses An array of MyClass objects. */
TestClass.protoype.someMethod = function( myClasses ){
   myClasses[0].aMethodOnMyClass();
}

这使得代码完成在IDE的像WebStorm实际提供后的权利类型信息[0]. 。 这非常适用于数组类型,但是我有我自己的集合类型,我想利用这个功能了。 问题是我无法找到正确的语法(也许是因为没有,还)。 我希望能够以某种方式宣布我的课是这样的:

/**
 * @typeparam {T} the type parameter
 * @constructor {Test2.<T>}
 * */
Test2 = function(){};

/**
 * @returns {T} a value of type T, where T is the generic type parameter of Test2
 */
Test2.prototype.getGenericValue = function(){}

这句法或功能不与我的IDE工作,并没有列出在这里 ,所以我想知道是否有这个用例语法,无论是WebStorm或任何其他JS的创作工具。

Answer 1:

您可以尝试使用@template标签(标签无证在谷歌关闭图书馆使用-仿制药的极其有限的形式)。 就像是:

/**   
 * Search an array for the first element that satisfies a given condition and   
 * return that element.   
 * @param {Array.<T>|goog.array.ArrayLike} arr Array or array   
 *     like object over which to iterate.   
 * @param {?function(this:S, T, number, ?) : boolean} f The function to call   
 *     for every element. This function takes 3 arguments (the element, the   
 *     index and the array) and should return a boolean.   
 * @param {S=} opt_obj An optional "this" context for the function.   
 * @return {T} The first array element that passes the test, or null if no   
 *     element is found.   
 * @template T,S   
 */  
goog.array.find = function(arr, f, opt_obj) {    
   var i = goog.array.findIndex(arr, f, opt_obj);    
   return i < 0 ? null : goog.isString(arr) ? arr.charAt(i) : arr[i];  
}; 

WebStorm使用该标签的类型提示 - 也就是说,如果我们通过上面的字符串样品中的goog.array.find的阵列,IDE会知道,返回类型为字符串,因此字符串完成选项将建议等。

不知道这是你正在寻找......看起来相关的职位是什么在这里 。



Answer 2:

在此期间,该功能支持已经完成,目前在案的关闭编译JSDOC页 。

基本上是这样的:

/**
 * @constructor
 * @template T
 */
Foo = function() { ... };

/** @return {T} */
Foo.prototype.get = function() { ... };

/** @param {T} t */
Foo.prototype.set = function(t) { ... };

不幸的是,在写作的时候,WebStorm 7.0 不支持此功能(投票吧!) ,但。



Answer 3:

下面的代码工作正常,我在WebStorm 8。

/** @type {Array.<MyPair.<Event, Array.<Thought>>>} */
scope.pairs = [];

/**
 * @template TFirst, TSecond
 */
function MyPair(first, second){
    this.first = first;
    this.second = second;
}
/** @type {TFirst} */
MyPair.prototype.first = null;
/** @type {TSecond} */
MyPair.prototype.second = null;

...
function Event(){}
...
...
function Thought(){}
...


文章来源: Document generic type parameters in JSDOC