不能设置未定义typescript的属性0



在我的angular应用程序中,当循环通过json数据并试图将该数据分配给数据类型类的数组时,我得到了主题错误。我的代码是:

.. 
import {UnMarkedData} from './mt-UnMarkedData';
...
this.httpClient.get(GlobalConstants.DigAlertServiceURL + "TicketUnMarkedGet" )
.subscribe((data: any) => { 
//let ticket: string = data.UnMarked[0].Ticket;//this assignment works
var ticketData: UnMarkedData[];
for (let i=0;i<data.UnMarked.length; i++){
ticketData[i].ID =  data.UnMarked[i].ID;//can't set property of undefined occurs here
ticketData[i].Ticket = data.UnMarked[i].Ticket;
ticketData[i].DateRcvd = this.FormatDate(data.UnMarked[i].DateRcvd);
}
UnMarkedData类是:
export class UnMarkedData {
public ID: number; 
public Ticket: string; 
public DateRcvd: string;
constructor() { 
}

}

知道我哪里错了吗?

感谢皮特

我认为其中一个会工作,但仍然得到相同的错误:

var ticketDatas:UnMarkedData [] = [];
//var ticketData: [{ID:number, Ticket:string, DateRcvd:string}];//gives error
for (let i=0;i<data.UnMarked.length; i++){
//let ticketData:UnMarkedData = new UnMarkedData();//get error
let ticketData:UnMarkedData = {ID:undefined, Ticket:undefined, DateRcvd:undefined};//get error
ticketData[i].ID =  data.UnMarked[i].ID;
ticketData[i].Ticket = data.UnMarked[i].Ticket;
ticketData[i].DateRcvd = this.FormatDate(data.UnMarked[i].DateRcvd);
ticketDatas.push(ticketData);
}

正如Randy在注释中指出的那样,您还没有初始化数组。这意味着在运行时,你试图访问索引undefined;

var ticketData: UnMarkedData[] = []; // <-- Initialise the array as an empty list
for (let i=0;i<data.UnMarked.length; i++){
ticketData[i].ID =  data.UnMarked[i].ID;
ticketData[i].Ticket = data.UnMarked[i].Ticket;
ticketData[i].DateRcvd = this.FormatDate(data.UnMarked[i].DateRcvd);
}

这是有效的,只是需要更仔细地看看:谢谢Randy和El-Mo,你们的想法是正确的

var ticketDatas:UnMarkedData [] = [];
for (let i=0;i<data.UnMarked.length; i++){
let ticketData:UnMarkedData = new UnMarkedData();
ticketData.ID =  data.UnMarked[i].ID;//was mistakenly assigning ticketData[i].ID
ticketData.Ticket = data.UnMarked[i].Ticket;
ticketData.DateRcvd = this.FormatDate(data.UnMarked[i].DateRcvd);
ticketDatas.push(ticketData);
}

最新更新