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!