Ego*_*hih 6 javascript generics documentation jsdoc jsduck
我正在为我的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);
Run Code Online (Sandbox Code Playgroud)
样本输出:
MyArray <T>
我完美的数组类.
BirdArray <T extends Bird >扩展MyArray <T>
请使用这个真棒数组类来计算鸟类.
有没有办法在JSDuck中实现这一目标?如果没有,是否有一些JS文档生成器可以为我做到这一点?请假设它应该像JSDuck一样通用,以确保我能够使用任意类继承模式.
有趣的是,Google Closure Compiler支持泛型类型,语法如下:
/**
* @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());
Run Code Online (Sandbox Code Playgroud)
由于 JSDuck已经支持Closure Compiler 风格的类型注解,应该已经可以编写像{MyClass.<T>}. 然而,JSDuck 并没有将@template 标签用于完全不同的目的,而是实现自己的自定义标签,例如@typevar或覆盖内置标签@template以使用自定义标签系统进行出价。
但是由于 JSDuck 中没有实际的泛型类型支持,它不会检查您的泛型类型。相反,它可能会抱怨您引用的是未知类型T和其他类型。但是很容易通过使用 .jsduck 来让 JSDuck 忽略某些类型(或类型变量)--external=T。
最后一点。Closure Compiler 不支持您extends在类型变量中的语法,而且我真的不明白您为什么要编写T extends Birdand then {MyArray<T>},而不是只编写{MyArray<Bird>}.
| 归档时间: |
|
| 查看次数: |
10247 次 |
| 最近记录: |