Angular 2实例化具有空值的类

时间:2017-05-04 12:33:06

标签: angular typescript

如何将成员实例化为具有空值的类?

Plunkr

我用

实例化

public members = new MemberClass();

但控制台显示成员:{}所以我无法设置默认的空值

所以基本上我试图复制一个空结构,如:

this.members = [ 
    { 
      "Name" : "", "Id" : "", "Team" : "",
      "Cases" : {
        "history" : []
      }
    }
];

2 个答案:

答案 0 :(得分:5)

使用接口;)这是一种可以使用属性设置为Member的空对象创建数组的方法。我不知道用例,至少我没有设置空对象/模型数组的属性,但是我们在这里:)

首先是你的接口,它们是:

export interface Member {
    Id: string;
    Name: string;
    Cases: Case[];
}
export interface History {
    Id: string;
    CaseNumber: string;
}
export interface Case {
    History: History[];
}

然后创建3个函数来设置属性:

export function createMember(Id?:string,Name?:string, Cases?:Case[]): Member {
  return {
    Id,
    Name,
    Cases[createCase()]       
  }
}

export function createCase(History?:History[]): Case {
  return {
    History[createHistory()]
  }
}

export function createHistory(Id?: string,CaseNumber?:string): History {
  return {
    Id,
    CaseNumber
  }
}

现在在您的组件中,您可以调用函数createMember,然后调用另外两个函数:

members = [createMember()];

PS,根据你的模型,以下不是Member - 数组的模型,它们的名称和构建不匹配,但我根据你提供的模型创建了上面的内容。 / p>

答案 1 :(得分:4)

请记住,您在那里使用的是Interface,而不是类。在Typescript中,就像在Javascript中一样,空对象只是{}

所以,要做你想要的,试试这个: let history: History = { Id:"", CaseNumber:""};

如果您尝试遗漏任何这些属性,则会收到他们需要的错误。如果您希望实例化时接口的属性是可选的,请更新您的界面,如下所示:CaseNumber?: string;

Find more in the handbook.

进一步阐明:类是一种具体类型,您可以像在任何语言中一样实例化和使用。如果您需要在属性上使用构造函数或默认值,则应使用export class MyType {}

但是,根据我的经验,在很多情况下,我发现Typescript中的接口比类更有用。这样做的原因是您可以在开发时对它们进行编码,但是当您发货时它们不包含在您的捆绑包中(N.B.这完全取决于您的用例)。