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()
我试图通过将子 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()