Это дополнительный вопрос к Использование 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'.
Как мне аннотировать суперкласс, чтобы передавать его типы?