Javascript 有没有办法在JS文档中定义泛型类型?
我正在为我的JS库寻找文档生成器。我找到了最全面、最强大的一个。但我看不到使用语法为泛型类和函数定义类型变量的方法。快速浏览一下流行的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
/**
* @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
。