我有一个类,里面有多个接口来模拟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
的实例吗?
答案 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();