Доступ к свойствам суперкласса из миксина с объявлениями TypeScript - PullRequest
0 голосов
/ 06 октября 2019

Это дополнительный вопрос к Использование Mixins класса JavaScript с файлами декларации TypeScript

С учетом смеси JavaScript:

export function Mixin(superclass) {
  return class Consumer extends superclass {
    connectedCallback() {
      super.connectedCallback && super.connectedCallback();
      this.mo = new MutationObserver(console.log)
      this.mo.observe(this)
    }

    classMethod() {
      return true
    }
  }
}

И файл декларации TypeScript:

export declare class Consumer extends HTMLElement {
  public classMethod(): boolean
}

declare type Constructor = new (...args: any[]) => HTMLElement;

declare type ReturnConstructor = new (...args: any[]) => HTMLElement & Consumer

export function Mixin<TBase extends Constructor>(superclass: TBase): TBase & ReturnConstructor;

Я ожидаю, что тело класса mixin получит типы HTMLElement из superclass,

, однако я получаю эту ошибку, жалуясь на то, что superclass не реализует HTMLElement

error TS2345: Argument of type 'this' is not assignable to parameter of type 'Node'.
  Type 'Consumer' is missing the following properties from type 'Node': baseURI, childNodes, firstChild, isConnected, and 47 more.

  06       this.mo.observe(this);

Если я добавлю следующий JSDoc в функцию mixin,

/** @param {typeof HTMLElement} superclass */
export function Mixin(superclass) { /*...*/ }

ошибка исчезнет, ​​но вместо этого я получу новую, утверждая, чточто Property 'connectedCallback' does not exist on type 'HTMLElement'.

Как мне аннотировать суперкласс, чтобы передавать его типы?

...