Angular2&Typescript-从嵌套JSON创建对象
我有一个类,其中包含多个接口,用于对JSON数据进行建模。例如:Angular2&Typescript-从嵌套JSON创建对象,json,angular,inheritance,typescript,Json,Angular,Inheritance,Typescript,我有一个类,其中包含多个接口,用于对JSON数据进行建模。例如: interface A { id: number; } interface B { name: string; surname?: string; } class MyClass implements A { people: B[]; notes: string[]; function1(){...} function2(){...} } 我有一个相同结构的JSON: { id: 1,
interface A {
id: number;
}
interface B {
name: string;
surname?: string;
}
class MyClass implements A {
people: B[];
notes: string[];
function1(){...}
function2(){...}
}
我有一个相同结构的JSON:
{
id: 1,
people: [
{
name: "john"
},
{
name: "alice",
surname: "smith"
}
],
notes: [ "Very important top secret note" ]
}
我可以直接从这个JSON创建MyClass的实例吗?您的数据结构与您的类几乎相同,您必须向该类添加一个id属性
class MyClass implements A {
id: number;
// ....
}
问题是,如果您尝试这样做:
let data: MyClass = {
id: 1,
people: [
{
name: "john"
},
{
name: "alice",
surname: "smith"
}
],
notes: [ "Very important top secret note" ]
}
这将不起作用,因为您的json没有function1和function2方法
一种解决方案是真正实例化MyClass并传递json,或者使用类似的构造函数方法
class MyClass {
static createFrom(jsonData: A & B): MyClass {
// create the objct and return
}
}
或者,您可以通过组合类的现有实例并传播json来创建该类型的变量
像这样:
let json = {
id: 1,
people: [
{
name: "john"
},
{
name: "alice",
surname: "smith"
}
],
notes: ["Very important top secret note"]
}
const c = new MyClass();
let mClass: MyClass = {...json, function1: c.function1, function2: c.function2 };
mClass.function1();
首先,接口有id字段,MyClass实现了它,我应该再次声明它吗?其次,我有比这个例子多得多的接口/类,所以用一个需要json的构造函数启动所有接口/类会花费太多时间。最后,我尝试创建一个没有方法的类的实例:AClass={…},但当我这样做时,AClass的实例返回false。您建议的第二种方法是创建此类的真实实例,还是将其保持为json?