Angular 在TypeScript中调用泛型类型的构造函数
我有以下代码:Angular 在TypeScript中调用泛型类型的构造函数,angular,typescript,ionic-framework,ionic3,Angular,Typescript,Ionic Framework,Ionic3,我有以下代码: public getProducts<T>(): Observable<T[]> { return this.httpClient .get<T[]>(this.baseUrl + '/users') .pipe( map((entities) => { return entities.map((entity) => { return n
public getProducts<T>(): Observable<T[]> {
return this.httpClient
.get<T[]>(this.baseUrl + '/users')
.pipe(
map((entities) => {
return entities.map((entity) => {
return new T(entity);
})
}),
catchError((err) => Observable.throw(err))
);
}
publicGetProducts():可观察{
返回此.httpClient
.get(this.baseUrl+'/users')
.烟斗(
地图((实体)=>{
返回实体。映射((实体)=>{
返回新的T(实体);
})
}),
catchError((err)=>Observable.throw(err))
);
}
这一行给了我一个错误:返回新的T(实体)
如何在TypeScript中调用泛型类型的构造函数?
T
只是一个类型,类型在运行时被擦除,因此类型永远不能出现在表达式中
您需要做的是传入T
的构造函数
public getProducts<T>(ctor: new (p: Partial<T>) => T): Observable<T[]> {
return this.httpClient
.get<T[]>(this.baseUrl + '/users')
.pipe(
map((entities) => {
return entities.map((entity) => {
return new ctor(entity);
})
}),
catchError((err) => Observable.throw(err))
);
}
public-getProducts(系数:新(p:Partial)=>T):可观察{
返回此.httpClient
.get(this.baseUrl+'/users')
.烟斗(
地图((实体)=>{
返回实体。映射((实体)=>{
返回新的ctor(实体);
})
}),
catchError((err)=>Observable.throw(err))
);
}
这意味着您有一个为T
定义的类。如果没有类,那么就不必费心于newt
。如果T
是一个接口,那么服务器返回的对象可能满足该接口,不需要做更多的事情/