7

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<T>
私の完璧な配列クラス。

BirdArray<T extends Bird > extends MyArray <T>
このすばらしい配列クラスを使って鳥を数えてください。

JSDuck でそれを達成する方法はありますか? そうでない場合、私のためにそれを行うことができるJSドキュメントジェネレーターはありますか? 任意のクラス継承パターンを使用できることを確認するために、JSDuck と同じくらい汎用性があると想定してください。

4

1 に答える 1

5

興味深いことに、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());

JSDuckはすでにClosure Compiler スタイルの型注釈をサポートしているため、 のような型を記述できるはず{MyClass.<T>}です。ただし、JSDuck は@template タグをまったく別の目的で使用するわけではありませんが、独自のカスタム タグを実装するか、ビルトインを@typevarオーバーライドして、カスタム タグ システム@templateを使用して入札を行います。

ただし、JSDuck には実際のジェネリック型のサポートがないため、ジェネリック型はチェックされません。それどころか、不明なタイプなどを参照していると不平を言うでしょうT。しかし、 を使用して、JSDuck に特定の型 (または型変数) を無視させるのは簡単--external=Tです。

最後に 1 つ。Closure Compiler はextends型変数の構文をサポートT extends Birdしていませ{MyArray<T>}{MyArray<Bird>}

于 2013-09-12T06:32:55.387 に答える