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

は、私は、そのモジュールに登録するモジュールとプロバイダーに指示しますが、私はこの使用してtypescriptですジェネリック医薬品に を行う方法を確認していないこのModule.register<AboutModule>([AboutService])のようなものでしたいずれかの助けを持っているしたいと思いますこれで私。ジェネリック

また、他の型ではなく型だけを受け入れるためには、どの型をparam型にするべきですか。私はクラスの型だけを受け入れるパラメータを持っているとします。

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

何か助けていただければ幸いです。

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>; 

出典:

+0

どうすればいいですか?(klass:typeof T、provider:Array )?そして、それを 'register(AboutModule、[AboutService])'と呼び、 'T'は最初のパラメータから推論します。 – jonrsharpe

+0

@jonrsharpe私がklassを使うときは:typeof T throwingエラーは型としてしか参照されていませんが、値として使用されます – user3205479

+0

'T'ではなく' ngModule:klass'も必要です。 – jonrsharpe

答えて

0

カスタムClassタイプを使用することができますhttps://github.com/kaiu-lab/serializer/blob/master/src/class.ts

をパラメータとしてクラスの配列を求めます。

タイプはメソッド自体の中では使用できません。実行時にタイプのクラスを取得することはできないため、タイプコピーはまったくできません。

私はリンクされたgithubのコードを自由に調べることができます。この正確な問題があり、このカスタムクラスタイプを使用して解決しました。