如果我有父母和儿童打字稿对象:
class Parent {
private parentField: string;
}
class Child extends Parent {
private childField: string;
}
现在我通过休息服务收到两种类型的json对象列表。
通常当我收到一个json对象时,我只是通过复制所有属性将它映射到typescript对象。但在这种情况下,它不是那么简单,因为我不知道我正在处理哪个对象(它可以是父母或孩子)
将json类型和子类型映射到typescript的最佳方法是什么?
答案 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
}