typescript - Deklarer fabrikk med generiske typer fra egen klasse


Jeg prøver å deklarere en (kun grensesnitt) fabrikk som gir enhver generisk type fra egen klasse til resultatet.

Først erklærer jeg alle klasser. Foo er grunnklassen. Moo er en brukerklasse.

declare module 'any-module' {
    class Foo<T> {
        get test(): T;
    }

    class Moo<T> extends Foo<T> {
         get moo(): T;
    }
}

Deretter prøver jeg å deklarere en fabrikk som kjenner til Foo men ikke kjenner til Moo. Denne fabrikken må produsere Foo-lignende klasser ved instans fra utvidelser av Foo (Moo for eksempel).

interface IFactory<T> {
    create(Instance) => ??? /* like: new Instance<T>() */
}

Så, jeg prøvde uansett for det:

interface IFactory<T> {
    create1<R extends Foo<T>>(instance: new (...ars: any) => R): R;
    create2<X extends new (...ars: any) => Foo<T>>(instance: X): InstanceType<X>;
}

men ingen av de ovennevnte måtene fungerer riktig

// Getting factory with string generic
const factory = {} as IFactory<string>;
    
factory.create1(Moo) // Generic type is string, but result is Foo 
factory.create2(Moo) // Result is Moo, but generic type is unknown

Takk!