我有一个要从与HTTP请求所获得的方法不同的方法返回的类型-我基本上想将该HTTP请求的结果分配为对象的属性,并返回该对象的可观察对象。我了解为什么下面的代码行不通,而是出于拥有代码的目的。
getAuditsByObjectAndType<T>(object: T): Observable<IAuditInformation<T>> {
const auditInfo: IAuditInformation<T> = {
audits: [],
object: object
};
auditInfo.audits = this.get<IAudit>(`audits?id=${object.id}`)
return Observable.of(auditInfo)
}
请问有一个运算符可以帮助我做我想做的事吗?
编辑:
有一个可行的实施方案,但可能会好很多。
getAuditsByObjectAndType<T>(object: T): Observable<IAuditInformation<T>> {
const auditInfo: Observable<IAuditInformation<T>> = Observable.of({
audits: [],
object: object
});
return this.get<IAudit>(`AuditItems?id=${object.id}`)
.combineLatest(auditInfo, (audits, info) => {
info.audits = audits;
return info
});
}
答案 0 :(得分:1)
您可以映射响应:
import 'rxjs/add/operator/map';
getAuditsByObjectAndType<T>(object: T): Observable<IAuditInformation<T>> {
return this.get<IAudit>(`audits?id=${object.id}`)
.map(audits => ({
audits,
object
}));
}
但是打字稿无法知道您的T
包含id
属性,因此您可以执行以下操作:
interface TheObjectWithAnId {
id: number;
}
getAuditsByObjectAndType<T extends TheObjectWithAnId>(object: T): Observable<IAuditInformation<T>>