解析JSON时未调用数据对象构造函数

时间:2017-02-18 16:30:40

标签: javascript json angular typescript

我从服务器获取一些数据,然后将其解析为TypeScript类。我正在尝试使用一些继承 - 每个类都需要能够报告其类型。 这是如何工作的:

这是基类

import { PageElementType } from './page-element-type'

export class PageElement {
    pageElementType: PageElementType;
    constructor(aPageElementType: PageElementType) { 
        this.pageElementType = aPageElementType; 
    }
}

这是派生类

import { PageElement } from './page-element.model'
import { PageElementType } from './page-element-type'

export class Metadata extends PageElement {
    id: number;
    body: string;

    constructor(){
        super(PageElementType.metadata);
    }
}

这是我调用来解析数据的服务函数

getExam(){
    let exam = this.http.get('http://orangeberry.hopto.org/api/Exam/1')
    .map((response:Response) => <Exam>response.json())
    .do(data => console.log(data));
    return exam;
}

好像我得到了某种简单的物体。我想要实际遵循类定义的有意义的功能对象。在我的案例中,实现这一目标的最简单,最直接的方法是什么?

1 个答案:

答案 0 :(得分:1)

强制转换只是静态代码分析的一个提示,但在运行时没有任何影响。

如果您希望该值成为类的实例,则需要自己创建这样的实例:

.map((response:Response) => new Exam(response.json()))

Exam类的构造函数将JSON分解为其属性。