无法将元素推送到Typescript

时间:2017-04-27 19:32:09

标签: angular typescript interface

我有两个接口,如下所示:

 export interface ICard
 {
     cardNumber:string;
     cardAddress: string;
     city: string;
 }
 export interface IStudent
 {
     cards: ICard[];
     name:string;
  }

在我的打字稿(.ts)文件中,我已经在我的班级

中进行了初步化
   private student: IStudent = <IStudent>{}; // Initializing my interface;
   private cardDetails: ICard[];        // Unable to use the same initialization like above

在我的功能中,下面我试图在我的cardDetails中添加多张卡片,并将cardDetails分配给我的IStudent界面。

    loadStudentCards()
    {
       var card: ICard = <ICard>{}// Initializing here.
        card.cardNumber = "12345";
        card.cardAddress = "Some address";
        card.city = "Seattle";

       this.cardDetails.push(card); //  This is the place i am seeing error "Cannot read property 'push' of undefined"
         this.student.cards = this.cardDetails;
       }

这是我看到错误的地方“无法读取未定义的属性'推送”

这可能是一个简单的问题,但不确定如何在这里初始化接口数组对象。有人可以在这里暗示一下吗?

2 个答案:

答案 0 :(得分:2)

那是因为您没有为cardDetails分配任何价值 它应该是:

var cardDetails: ICard[] = []; 

此外,您可以使用其他形式的断言(强制转换):

var student: IStudent = {} as IStudent;

最后,在定义类成员时,您不能使用var(或let / const),它应该是:

class MyClass {
    private cardDetails: ICard[] = []; 
    ...
}

不确定它是否是代码的实际部分,或者您刚发布了一个示例。

答案 1 :(得分:1)

使用以下代码,该代码具有很强的可读性和最佳实践

loadStudentCards()
    {
       let card: ICard = {
               cardNumber : "12345",
               cardAddress : "Some address",
               city : "Seattle"
       }
       this.cardDetails= new Array<ICard>();

       this.cardDetails.push(card); 
       this.student.cards = this.cardDetails;
}