我有以下代码:
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中调用泛型类型的构造函数?
答案 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
是接口,则服务器返回的对象可能会满足该接口,并且无需执行其他操作/