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

Dra*_*ago 4 typescript ionic-framework ionic3 angular

我有以下一段代码:

  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))
      );
  }
Run Code Online (Sandbox Code Playgroud)

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

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

Tit*_*mir 6

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))
      );
  }
Run Code Online (Sandbox Code Playgroud)

这意味着您为 定义了一个类T。如果没有课,那就不要理会new T。如果T是一个接口,那么服务器返回的对象大概会满足该接口,不需要做更多的事情/