Javascript 有没有办法在JS文档中定义泛型类型?

Javascript 有没有办法在JS文档中定义泛型类型?,javascript,generics,documentation,jsdoc,jsduck,Javascript,Generics,Documentation,Jsdoc,Jsduck,我正在为我的JS库寻找文档生成器。我找到了最全面、最强大的一个。但我看不到使用语法为泛型类和函数定义类型变量的方法。快速浏览一下流行的JS文档生成器,我觉得它们都没有能力做到这一点。下面是我正在寻找的一个伪示例: /** * @class MyArray * My perfect array class. * @typevar T */ MyArray = function() ... /** * @class BirdArray * Please count birds usin

我正在为我的JS库寻找文档生成器。我找到了最全面、最强大的一个。但我看不到使用语法为泛型类和函数定义类型变量的方法。快速浏览一下流行的JS文档生成器,我觉得它们都没有能力做到这一点。下面是我正在寻找的一个伪示例:

/**
 * @class MyArray
 * My perfect array class.
 * @typevar T
 */
MyArray = function() ...

/**
 * @class BirdArray
 * Please count birds using this awesome array class.
 * @typevar T extends {Bird}
 * @extends {MyArray<T>}
 */
BirdArray = function() ...
extend(BirdArray, MyArray);
/**
*@class-MyArray
*我的完美数组类。
*@typevar T
*/
MyArray=函数()。。。
/**
*@class-BirdArray
*请使用这个令人敬畏的数组类来计算鸟的数量。
*@typevar T扩展了{Bird}
*@extends{MyArray}
*/
BirdArray=函数()。。。
扩展(BirdArray,MyArray);
样本输出:

MyArray
我的完美数组类

BirdArray扩展
请使用这个令人敬畏的数组类来计算鸟的数量


有没有办法在JSDuck中实现这一点?如果没有,是否有一些JS文档生成器可以为我做到这一点?请假设它应该像JSDuck一样通用,以确保我能够使用任意类继承模式。

有趣的是,Google Closure编译器有如下语法:

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

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

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

/** @type {!Foo.<string>} */ var foo = new Foo();
var foo = /** @type {!Foo.<string>} */ (new Foo());
/**
*@constructor
*@T模板
*/
Foo=函数(){…};
/**@return{T}*/
Foo.prototype.get=function(){…};
/**@param{T}T*/
Foo.prototype.set=函数(t){…};
/**@type{!Foo.}*/var Foo=new Foo();
var foo=/**@type{!foo.}*/(new foo());
作为JSDuck闭包编译器样式的类型注释,应该已经可以编写像
{MyClass.}
这样的类型了。然而,JSDuck并没有将a完全用于不同的目的,而是实现了自己的自定义标记,如
@typevar
,或者覆盖内置的
@template
,使用

但由于JSDuck中没有实际的泛型类型支持,因此它不会检查您的泛型类型。相反,它可能会抱怨,您正在引用未知类型
T
和其他类型。但是,使用
--external=T
很容易让JSDuck忽略某些类型(或类型变量)


最后一个音符。闭包编译器不支持类型变量中的
extends
语法,我也不明白为什么要编写
t extends Bird
,然后再编写
{MyArray}
,而不是只编写
{MyArray}
,谢谢您提供的信息。我不会使用自定义标记,因为泛型类型逻辑在所有编程语言中都非常复杂。这可能是一个大项目。您关于
--external=T
的建议非常有用。编写
BirdArray
的原因是您可以在此实现中定义显式
BirdArray
,而不仅仅是抽象的
BirdArray