Angular2& Typescript - 从嵌套的JSON创建对象

时间:2017-02-08 13:58:15

标签: 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,
  people: [
    {
      name: "john"
    },
    {
      name: "alice",
      surname: "smith"
    }
  ],
  notes: [ "Very important top secret note" ]
}

我可以直接从这个JSON创建MyClass的实例吗?

1 个答案:

答案 0 :(得分:1)

您的数据结构与您的类几乎相同,您必须向该类添加一个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();

Link to playground