在TypeScript中调用泛型类型的构造函数

时间:2019-04-30 21:54:26

标签: 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 new T(entity);
          })
        }),
        catchError((err) => Observable.throw(err))
      );
  }

此行给我一个错误:return new T(entity);

如何在TypeScript中调用泛型类型的构造函数?

1 个答案:

答案 0 :(得分:3)

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

这意味着您具有为T定义的类。如果没有课程,那就不用去new T了。如果T是接口,则服务器返回的对象可能会满足该接口,并且无需执行其他操作/

相关问题