Использование существующего класса (конструктор js) в функции mixin - PullRequest
0 голосов
/ 15 декабря 2018

Есть такой пример в документах для классов mixins.

type Constructor<T> = new(...args: any[]) => T;

function Tagged<T extends Constructor<{}>>(Base: T) {
    return class extends Base {
        _tag: string;
        constructor(...args: any[]) {
            super(...args);
            this._tag = "";
        }
    }
}

Но что, если у меня уже есть реализации Tagged.Похоже, я просто пытаюсь Base extends Tagged.Но в моем случае Tagged имеет реализацию TypeScript в одной 3-й стороне библиотеки, а Base - это конструктор JS, возвращаемый фабричным методом другой 3-й стороны библиотеки.

Какой лучший способ их смешать?Другими словами, как определить класс mixin на основе уже существующего класса (повторное использование кода)?

1 Ответ

0 голосов
/ 16 декабря 2018

В этом примере Tagged принимает класс и возвращает расширенный класс.Вы не можете использовать это следующим образом:

Base extends Tagged

, потому что это не Base, которое расширяет Tagged - это наоборот.

Если и Base, и Taggedпредоставляются для вас, вы должны использовать их так:

const MyExtendedClass = Tagged(Base);
new MyExtendedClass();
...