识别打字稿中的JSON子类型

时间:2017-02-20 10:25:33

标签: json typescript polymorphism

如果我有父母和儿童打字稿对象:

class Parent {
    private parentField: string;
}

class Child extends Parent {
    private childField: string;
}

现在我通过休息服务收到两种类型的json对象列表。

通常当我收到一个json对象时,我只是通过复制所有属性将它映射到typescript对象。但在这种情况下,它不是那么简单,因为我不知道我正在处理哪个对象(它可以是父母或孩子)

将json类型和子类型映射到typescript的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

首先,当你收到一个json时,包含你发布的类型的对象。你拥有的是类,jsons有对象 如果你想输入你从json得到的东西,那么:

interface Parent {
    parentField: string;
}

interface Child extends Parent {
    childField: string;
}

然后这很好:

let json = { parent: { parentField: "a" }, child: { parentField: "a", childField: "b" } };
let parent: Parent = json.parent;
let child: Child = json.child;

如果您正在使用课程,那么您需要:

let parent = Object.assign(new Parent(), json.parent);
let child = Object.assign(new Child(), json.child);

要区分使用type guard

function isChild(obj: any): obj is Child {
    return obj.childField != null;
}

if (isChild(json.obj)) {
    // json obj is child
} else {
    // json obj is parent
}