2017-12-28 3 views
0
export class Module { 
    static register<T>(provider: Array<Provider>): ModuleWithProviders { 
    return { 
     ngModule: T, // error type is being used as value 
     providers: provider 
    }; 
} 

würde Ich mag so etwas wie dieses Module.register<AboutModule>([AboutService]) haben, die das Modul und Anbieter teilt mit diesem Modul registriert werden, aber ich bin nicht sicher, wie dies mit Typoskript Generika zu tun Könnte jemand helfen ich damit.Generics in statischen Methoden in Typoskript

Auch was sollte der Param-Typ sein, nur Typen anstelle von anderen Typen zu akzeptieren. Angenommen, ich möchte Parameter haben, die nur Klassentypen akzeptieren.

stats(list: ClassType){} // something like this 
stats(list: any){} // currently im using this, how should I restrict param only to types. 

Jede Hilfe wird sehr geschätzt.

+0

Warum nicht make '(klass: typeof T, Anbieter: Array )'? Dann nennen Sie es '.register (AboutModule, [AboutService])' und 'T' wird vom ersten Parameter abgeleitet. – jonrsharpe

+0

@jonrsharpe wenn ich klasse: typeof T seine Wurffehler nur als Typ bezeichnet aber als Wert verwendet – user3205479

+0

Nun, Sie brauchen auch ngModule: klass', nicht 'T'. – jonrsharpe

Antwort

0

können Sie einen benutzerdefinierten Class-Typen:

export type Abstract<T = any> = Function & { prototype: T }; 

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

export type Class<T = any> = Abstract<T> | Instantiable<T>; 

Quelle: https://github.com/kaiu-lab/serializer/blob/master/src/class.ts

Und für eine Reihe von Klassen als Parameter fragen.

Typen können nicht innerhalb der Methode selbst verwendet werden, dies kann in Typoskript überhaupt nicht ausgeführt werden, da Sie die Klasse eines Typs zur Laufzeit nicht abrufen können.

Fühlen Sie sich frei, den Code in der GitHub zu erkunden, ich verknüpfte, wir haben dieses genaue Problem und löste es mit diesem benutzerdefinierten Klassentyp.

Verwandte Themen