Angular 可观察的http映射看起来像而不是实际的http映射
看来我对打字本有很大的误解 考虑到这些代码片段,我希望在返回的observable上有一个getTitle方法,但它并不存在。我只是有一个看起来像AttachableContentModel的对象,没有这个方法。有什么好处Angular 可观察的http映射看起来像而不是实际的http映射,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,看来我对打字本有很大的误解 考虑到这些代码片段,我希望在返回的observable上有一个getTitle方法,但它并不存在。我只是有一个看起来像AttachableContentModel的对象,没有这个方法。有什么好处 export class AttachableContentModel extends AbstractPopupModel { Url: string; EmailAddress: string; StreetView
export class AttachableContentModel extends AbstractPopupModel {
Url: string;
EmailAddress: string;
StreetViewUrl: string;
Images: Array<ImageModel>;
Videos: Array<VideoModel>;
Documents: Array<DocumentModel>;
getTitle(): string {
if (this.Name &&
this.DisplayName &&
this.Name !== this.DisplayName)
return this.Name + " (" + this.DisplayName + ")";
return this.Name ? this.Name : this.DisplayName;
};
Silly: string;
}
...
fecthAttachableContent(request: AttachableContentRequest): Observable<AttachableContentModel> {
return this.http
.postAsJson(`${environment.apiBaseUrl}attachablecontent`, {})
.map(res => res.json())
}
使用接口,而不是类。如果不手动调用类构造函数,就无法将JSON对象反序列化为类。简单地分配给兼容类型或作为兼容类型返回对运行时行为没有影响
有人建议这是另一个问题的重复,但该问题的答案非常糟糕,因为它建议您遵循非常糟糕的编码实践
即使手动调用类构造函数,数据也不会同构。将逻辑排除在响应和请求类型之外
您应该描述通过带有接口的HTTP请求检索和发送的对象的形状
这是因为接口只是一个类型,反序列化函数here.json已经为您创建了值,所以您只需要强制转换它。这实际上是您当前正在做的事情,但是由于您要强制转换到的类型对应于一个类,这是误导性的,因为反序列化器创建的对象不是您的类构造函数创建的实例
请记住,对于Angular 2文档示例,要略带保留,因为它们与TypeScript的使用有关。他们使用的语言不好,也不地道。你在getTitle上使用过公共访问器吗?@camaron是的,尽管我知道公共是默认的访问器。oop的可能副本是20世纪90年代的-@我希望有人能告诉TC39