我有两个接口,如下所示:
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;
}
这是我看到错误的地方“无法读取未定义的属性'推送”
这可能是一个简单的问题,但不确定如何在这里初始化接口数组对象。有人可以在这里暗示一下吗?
答案 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;
}