Как использовать Jsdo c для описания свойства расширенного класса, определенного в суперклассе - PullRequest
0 голосов
/ 03 апреля 2020

Я хочу сделать следующее:

class A {
  someMethod() {
    //
  }
}

class B {
  constructor (options) {
    this.dependency = options.dependency;
  }
}


class C extends B {
  test() { 
    this.dependency.a. // want a to refer to instance of A class and provide intellisense using jsdocs
  }
}

Я пробовал некоторые вещи на обычных объектах, и это работает, но я не могу заставить его работать с классом или переопределить какое-либо свойство. вот что я попробовал:

/**
 * @typedef {Object} WithSomeProp
 * @property {{ a: A }} prop
 * 
 * @typedef {C & WithSomeProp} extended
 */

/**
 * @type {extended}
 */
let a = {};
a.prop.a.someMethod // works (shows suggestion)
a.test // works

/**
 * @typedef {Object} WithOtherProp
 * @property {{ a: A }} dependency
 * 
 * @typedef {C & WithOtherProp} extendedTwo
 */

/**
 * @type {extendedTwo}
 */
let b = {};
b.dependency. // doesn't work
b.test // works

Таким образом, в целом нет никакого способа переопределить определение свойства как-нибудь позже в расширенных классах для получения поддержки intellisense?

1 Ответ

0 голосов
/ 03 апреля 2020

Я только что понял, что могу сделать это вместо этого (теперь я чувствую себя глупо)

class C extends B {
  constructor(options) {
    super(options);
    /**
     * @type {A}
     */
    this.a = options.dependency.a;
  }
  test() { 
    this.a.someMethod // works fine now
  }
}
...