JSDoc 覆盖 return 类型的继承 class 方法

JSDoc override return type of inherited class method

我试图通过将子 Class 传递给父方法来为继承方法提供动态 return 类型。请在下面找到一个小例子。目前它没有用,我想我离它不远了。

我知道解决方法是在每个子项中手动声明每个继承方法 class 是一个选项,只需从内部调用 super() 但这并不像我希望的那样优雅对于.

我希望有人能帮我弄清楚泛型类型,或者如果可能的话。

提前致谢:

/**
 * The Animal base class
 * @class
 */
class Animal {

    /**
     * @param  {T} classType
     */
    constructor (classType) {
        this.classType = classType
    }
    /**
     * @returns {T} A baby of the same type as the parent instance
     */
    giveBirth () {
        return new this.classType()
    }
}

/**
 * The Dog class
 * @class
 * @extends Animal
 */
class Dog extends Animal {
    constructor () {
        super(Dog)
    }

    bark () {
        return 'woof'
    }
}

const dog = new Dog()
const babyDog = dog.giveBirth()
babyDog.bark() // JSDoc does not consider it an instance of Dog

Animal 添加 @template 并正确扩展 (@extends Animal<Dog>) 对我有用

/**
 * The Animal base class
 * @class
 * @template T
 */
class Animal {

    /**
     * @param {T} classType
     */
    constructor (classType) {
        this.classType = classType
    }
    /**
     * @returns {T} A baby of the same type as the parent instance
     */
    giveBirth () {
        return new this.classType()
    }
}

/**
 * The Dog class
 * @class
 * @extends Animal<Dog>
 */
class Dog extends Animal {
    constructor () {
        super(Dog)
    }

    bark () {
        return 'woof'
    }
}

const dog = new Dog()
const babyDog = dog.giveBirth()
babyDog.bark()