Angular 可观察的http映射看起来像而不是实际的http映射

Angular 可观察的http映射看起来像而不是实际的http映射,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,看来我对打字本有很大的误解 考虑到这些代码片段,我希望在返回的observable上有一个getTitle方法,但它并不存在。我只是有一个看起来像AttachableContentModel的对象,没有这个方法。有什么好处 export class AttachableContentModel extends AbstractPopupModel { Url: string; EmailAddress: string; StreetView

看来我对打字本有很大的误解

考虑到这些代码片段,我希望在返回的observable上有一个getTitle方法,但它并不存在。我只是有一个看起来像AttachableContentModel的对象,没有这个方法。有什么好处

    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