Tengo dos interfaces como a continuación:
export interface ICard { cardNumber:string; cardAddress: string; city: string; } export interface IStudent { cards: ICard[]; name:string; }En mi archivo mecanografiado (.ts), he inicializado a continuación en mi clase
private student: IStudent = <IStudent>{}; // Initializing my interface; private cardDetails: ICard[]; // Unable to use the same initialization like aboveEn mi función, a continuación, estaba tratando de agregar varias tarjetas a mi cardDetails y asignando cardDetails a mi interfaz 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; }Este es el lugar donde veo el error "No se puede leer la propiedad 'empujar' de indefinido"
Esta podría ser una pregunta simple, pero no estoy seguro de cómo inicializar el objeto de matriz de interfaz aquí. ¿Puede alguien lanzar una pista aquí?
Eso es porque no ha asignado ningún valor a cardDetails .
Debería ser:
var cardDetails: ICard[] = [];Además, puede usar la otra forma de aserción de tipo (casting):
var student: IStudent = {} as IStudent; Lo último, no puede usar var (o let / const ) al definir miembros de la clase, debería ser:
class MyClass { private cardDetails: ICard[] = []; ... }No estoy seguro si es una parte real de su código o si acaba de publicar un ejemplo.
Use el siguiente código que es mucho más legible y también es la mejor práctica
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; }