質問

私はコンストラクタを返すJavaScript関数を持っています(下記のコードサンプルを参照)。JSDocの@returnsタグを使用してこれを文書化しますか。それは私がコンストラクタ自体ではなく "MyConstructor"のインスタンスを返すことを意味するので、@returns {MyConstructor}を実行するのは正しいとは思われませんでした。

function MyConstructor() {
    var self = this;

    self.myFunction = function() {
        return true;
    };

    self.getMyFunctionResult = function() {
        return self.myFunction();
    };
}

/**
 * @returns {?} A constructor that will be instantiated
 */
function getConstructor() {
    return MyConstructor;
}

var constructor = getConstructor();
var instance = new constructor();
.

役に立ちましたか?

解決

機能を使用して、関数によって返される型を確認できます。

console.log(typeof constructor, typeof instance); // function object
.

ドキュメントで言う:

/**
 * Returns the sum of a and b
 * @param {Number} a
 * @param {Number} b
 * @returns {Number} Sum of a and b
 */
function sum(a, b) {
    return a + b;
}
.

http://usejsdoc.org/tags-returns.html

SOの例は次のようになります:

/**
 * Returns the MyConstructor class
 * @returns {Function} MyConstructor class
 */
function getConstructor() {
    return MyConstructor;
}
.

または項目のインスタンスを作成している場合:

/**
 * Returns an instance of the MyConstructor class
 * @returns {Object} MyConstructor instance
 */
function getInstance() {
    return new MyConstructor();
}
.

他のヒント

@returnsの後に括弧を使用する方法があるとは思わない。括弧内に何が起こるのは、常にとして解釈されます。これは言われている、インスタンスを文書化してインスタンスへのリンクを使用して、タイプの特定のインスタンスが返されていることを文書化する方法があります。説明のコードを説明するのに必要な要素に短縮しました:

/**
 * @class
 */
function MyConstructor() {

}

/**
 * @returns {Function} A constructor that will be instantiated. Always
 * returns {@link MyConstructor}.
 */
function getConstructor() {
    return MyConstructor;
}
.

クラス以外のものでも行うことができます:

/**
 * @public
 */
var foo = 1;

/**
 * @returns {number} {@link foo}.
 */
function getFoo(){
    return foo;
}
.

私の知る限りでは、これはJSDoc 3と同じくらい良いです。

は少し遅れていますが、私は今日の質問イベントのための適切な答えを見つけることが問題ありません。

WebStorM上で自動的にJSDOCを自動的に生成しようとすると、これは私が得るものです:

class Test {}

/**
 *
 * @return {Test}
 * @constructor
 */
function getTestConstructor() {
    return Test;
}
.

戻り型の定義はまだ奇妙ですが、コンストラクタ注釈は目的を果たすことがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top