0

JsDoc3ClosureCompilerを使用しています。JSONを出力するJsDocテンプレートを使用して、カスタムスクリプトを使用してHTMLを作成します。

カスタムクラスを返す関数があり(ただし、コンストラクターはありません。また、コンストラクターも必要ありません)、それ(関数)と、返されたオブジェクトに存在する関数を文書化できるようにしたいと考えています。

myLib.defer = function() {

    return {
        'then':    function() {},
        'resolve': function() {},
        'reject':  function() {},
        'notify':  function() {},
        'promise': function() {}
    };

};

これを文書化するにはどうすればよいですか?私はコンストラクターを持っていませんし、コンストラクターも必要ありません。「クラス」を文書化することについてはあまり気にしません(クラスは必要ありません。さらに、返されるオブジェクトは@returnこの関数ので文書化されます)。必要なのは、に存在する関数を文書化することだけです。オブジェクトが返されたので、それらはJsDocのJSON出力になり、私が取得できるようになります。

また、私はクロージャコンパイラのAVANCED_OPTIMIZATIONSモードを使用しているので、回避策の副作用(役に立たないコードなど)がそれによって抑制される場合、それは良い回避策です。

4

2 に答える 2

1

残念ながら、これを行う方法は見苦しくありませんが、これはうまくいきます。

まず、チャドが述べたように、インターフェースを持つコンストラクターを持たないクラスを文書化できます。次のようになります。

/**
 * Description of the Deferred interface.
 * @interface Deferred
 */
function Deferred() {}

そして、次のようにそのメソッドを文書化できます(たとえば):

/**
 * Returns a Promise
 * @function Deferred.promise
 * @return {Promise} A Promise.
 */
Deferred.prototype.promise = function() {};

次に、コンストラクターのないクラスを返す関数で、次のように戻り値に注釈を付けます。

myLib.defer = function() {

    /** @type {Deferred} */
    return {
        'then':    function() {},
        'resolve': function() {},
        'reject':  function() {},
        'notify':  function() {},
        'promise': function() {}
    };

};

ただし、これは Closure Compiler のみを通過します。JsDoc3 JSON エクスポート テンプレート(おそらく通常のテンプレートも) では正しく変換されないため、次の@class注釈が必要です(CC は無視します)。

/**
 * Description of the Deferred interface.
 * @interface Deferred
 * @class Deferred
 */
function Deferred() {}

これらすべてが整っていれば、ドキュメントは正しく生成され、コードは以前と同じようにコンパイルされます。すべてのボイラープレートは、コンパイル時にデッド コードとして削除されます。

更新: Chad が言及しているように、非インターフェイス直接インスタンス化しようとしても警告は表示されません。

これについての 1 つの方法は、その質問に対する彼の回答で述べたように、インターフェイス コンストラクター@private@constオブジェクト リテラルにすることです。

于 2012-11-28T01:11:42.457 に答える
0

質問が重複しています。JavaScript で return を文書化する方法 を参照してください。

この場合、ライブラリのように見えるため、インターフェイスを宣言して使用することができます。例については、 jQuery externsを参照してください。

于 2012-11-27T21:40:06.810 に答える