我正在为我的JS库寻找文档生成器。我发现JSDuck是最全面和最强大的一个。但是我没有看到使用其语法为泛型类和函数定义类型变量的方法。快速浏览一行的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);
示例输出:
MyArray
我完美的阵列课。
有趣的是,Google Closure Compiler支持泛型类型,语法如下: 由于 JSDuck 已经支持闭包编译器样式类型注释,因此应该已经可以编写像 但由于 JSDuck 中没有实际的泛型类型支持,因此它不会检查泛型类型。相反,它可能会抱怨您引用的是未知类型的 最后一点。闭包编译器不支持类型变量中的/**
* @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());
{MyClass.<T>}
这样的类型。但是,JSDuck 不会将 @template 标记用于完全不同的目的,而是实现自己的自定义标记(如 @typevar
)或覆盖内置@template
以使用自定义标记系统进行出价。T
和其他人。但是通过使用 --external=T
很容易使 JSDuck 忽略某些类型(或类型变量)。extends
语法,我真的不明白为什么要先写T extends Bird
然后{MyArray<T>}
,而不仅仅是写{MyArray<Bird>}
。