He notado un problema al trabajar con una clase principal que se amplía con una clase secundaria. Ambas clases tienen un atributo de 'datos', en la clase principal es un tipo genérico de 'Objeto' y en la clase secundaria es del tipo 'DogData'.
El constructor del padre está configurando 'this.data = data' que debería anular el tipo a cualquier tipo de atributo del niño, pero esto no está sucediendo.
Encuentre un pequeño ejemplo reproducible a continuación:
Espero que me estoy perdiendo algo y por favor no dude en señalarlo si es así.
Gracias por adelantado
* The animal base class * @class */ class Animal { /** * @param {number} id The ID of the animal * @param {Object} data The data of the animal */ constructor (id, data) { this.id = id this.data = data } } /** * The Dog class * @class * @extends Animal */ class Dog extends Animal { /** * @typedef DogData * @property {number} age * @property {string} name */ /** * @param {number} id The ID of the dog * @param {DogData} data The data of the dog */ constructor (id, data) { super(id, data) } } const dog = new Dog(1, { age: 10, name: 'Foobar' }) dog.data. // Will only autocomplete if this.data is explicitly set inside the Dog constructorDefina la propiedad antes del constructor y use @type en ella.
class Dog extends Animal { /** * @typedef DogData * @property {number} age * @property {string} name */ /** * @type {DogData} */ data; /** * @param {number} id The ID of the dog * @param {DogData} data The data of the dog */ constructor (id, data) { super(id, data) } }