【问题标题】:How to inherit method types from parent class with JsDoc?如何使用 JsDoc 从父类继承方法类型?
【发布时间】:2022-01-29 23:30:51
【问题描述】:

我希望能够为父类中的抽象方法编写 JsDoc,以便它适用于其所有继承者。

这个例子是我案例的一个非常精简的版本:

class Shape {
    /** Does some complicated example stuff.
     * @param {number} myNumber a real value.
     * @param {boolean} myBoolean a flag.
     * @param {string} myString some text.
     * @returns {string} something important.
     */
    doStuff(myNumber, myBoolean, myString) {}
}

doStuff 方法没有实现,因为(许多)子类中的每一个都以不同的方式实现它,但具有相同的签名和相同的参数。

class Triangle extends Shape {
    doStuff(myNumber, myBoolean, myString) {
        return myBoolean ? myNumber.toString() : myString;
    }
}

从截图可以看出,文档的文本部分是继承的,但是参数类型和返回类型丢失了。我还能做些什么来正确继承类型?我尝试使用@inheritdoc@abstract@extends@override@link 标签,但没有成功。

请考虑这是一个极其简化的版本,在我的实际代码中,文档块超过 20 行,将其复制到数量不断增加的子类中是不可行的,因为维护将是一场噩梦。

【问题讨论】:

标签: javascript inheritance jsdoc


【解决方案1】:

我认为这是不可能的,因为这是 JSDoc 的一个缺点。

无论如何,参数类型应该取自各自的基类函数是有争议的。

【讨论】:

    【解决方案2】:

    您如何将您的 doStuff() 方法包装在它自己的 @typedef 中?

    https://jsdoc.app/tags-typedef.html

    /**
    * @typedef doStuff
    * @type {Function}
    * @param {Number} myNumber
    * @param {Boolean} myBoolean
    * @param {String} myString
    * @returns {String}
    */
    

    然后在extends中使用:

    class Triangle extends Shape {
      /** @type {doStuff} */
      doStuff(){}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 2011-06-20
      相关资源
      最近更新 更多