使用 jsdoc 记录 javascript 构造函数的返回



我有一个返回构造函数的javascript函数(请参阅下面的代码示例)。 我将如何使用 jsdoc 的@returns标签来记录这一点。 @returns {MyConstructor} 似乎不正确,因为这意味着我返回的是"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();
我认为

没有办法在@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;
}

返回类型定义仍然很奇怪,但构造函数注释可以实现目的。

您可以使用以下命令检查函数返回的类型:

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

所以在你的例子中,它将是:

/**
 * 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 {new () => MyConstructor}

这会将返回对象转换为创建 MyConstructor 类型的匿名构造函数。

你可以非常灵活地结合它来塑造构造函数的外观(如果你有你想要访问的静态方法)以及构造函数创建的内容(如果你有在工厂中组合

在一起的部分)。

最新更新