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
是一个接口,那么服务器返回的对象可能满足该接口,不需要做更多的事情/