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

나는 모듈 및 제공을 알려줍니다이 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를 사용할 때 던지는 오류는 형식으로 만 사용되지만 값으로 사용됩니다. – user3205479

+0

글쎄,'T'가 아니라'ngModule : klass'도 필요합니다. – jonrsharpe

답변

0

사용자 지정 Class 유형 사용할 수 있습니다 https://github.com/kaiu-lab/serializer/blob/master/src/class.ts

을 그리고 매개 변수로 클래스의 배열을 부탁드립니다.

형식을 메서드 자체 내에서 사용할 수는 없으며 런타임에 형식 클래스를 가져올 수 없기 때문에 형식 스크립트에서는 형식을 사용할 수 없습니다.

내가 연결된 github의 코드를 자유롭게 탐색 할 수 있으므로이 정확한 문제가 있으며이 맞춤 클래스 유형을 사용하여 해결했습니다.