【问题标题】:Unable to push elements to Interface Collection in Typescript无法将元素推送到 Typescript 中的接口集合
【发布时间】:2017-04-27 19:32:08
【问题描述】:

我有两个界面如下:

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

在我的 typescript(.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;
       }

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

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

【问题讨论】:

    标签: angular typescript interface


    【解决方案1】:

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

    var cardDetails: ICard[] = []; 
    

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

    var student: IStudent = {} as IStudent;
    

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

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

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

    【讨论】:

    • 非常感谢!是的,我只是根据我的代码发布了一个示例,因为我的界面与我发布的不同。你是对的,我的代码中有“私人”变量,但在发布我的问题时这是错字。最后,这行得通! :)
    【解决方案2】:

    使用下面的代码,它可读性强,也是最佳实践

    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;
    }
    

    【讨论】:

    • 您确定使用variableName = new Array() 而不是variableName = [] 被认为是“最佳实践”吗?
    猜你喜欢
    • 2017-02-05
    • 2022-06-15
    • 1970-01-01
    • 2022-12-22
    • 2016-08-28
    • 2011-04-02
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多