Pesquisa de site

No TypeScript, existe uma maneira de criar uma função mixin genérica, que também permite um parâmetro de tipo genérico na classe retornada?


Estou tentando, com esperança, fazer este mixin funcionar, mas não tenho certeza se o que estou tentando fazer é até mesmo suportado pelo TS.

Existe alguma maneira de passar o <T> de GenericChild para a classe retornada de Mixin1? Ou há uma maneira de eu reestruturar/refatorar para obter um resultado semelhante?

Atualmente, há um erro de compilador para este código: "Uma classe mixin deve ter um construtor com um único parâmetro rest do tipo 'any[]'.". (também diz que prop2 não existe no tipo, mas eu acho que isso será corrigido se eu passar pelo primeiro erro)

Código :

class BaseClass1 {
    prop1 = 'baseClass1';
}

class BaseClass2 extends BaseClass1 {
    prop2 = 'baseClass2';
}
class GenericChild<T> extends Mixin1(BaseClass2)<T> {
    childProp: T | undefined = undefined;
}

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


function Mixin1<T extends Constructor<BaseClass1>>(Base: T) {
    return class <TResult> extends Base {
        anonResult: TResult | undefined = undefined;

        constructor(...args: any[]) {
            super(...args);
        }
    };
}

class Child1 extends GenericChild<string> {
    constructor() {
        super();
        console.log(this);
    }
}

console.log(new Child1().prop2);

Link do Playground

Quero que instâncias de Child1 possam acessar prop1, prop2, childProp e anonResult. Percebo que posso simplesmente fazer Child1 compor essas classes, mas quero ver se isso é possível com um mixin, para que as propriedades fiquem disponíveis diretamente na instância de Child1.

Além disso, eu li essa questão do TS, mas não acho que realmente cubra o que estou tentando fazer.