В моем компоненте есть следующее объявление:
private years: Array<{
year: string,
colspan: number
}> = [];
Это должен быть массив years
, где каждая запись имеет два свойства year
и colspan
.Теперь я хочу изменить эту переменную следующим методом, вызываемым в моем ngOnInit
:
fillYearsArray = () => {
var currentIndex : number = 1;
//fill the first entry and do not change it afterwards, error occurs here
this.years[0].year = "";
this.years[0].colspan= 1;
this.items.forEach( (item) => {
//if the first entry.year is empty fill it with the year of the current object
if (this.years[currentIndex].year) {
//if it is already set and the years equal enlarge colspan
//otherwise go to the next entry with the "new" year
if (this.years[currentIndex].year === String(item.year)) {
this.years[currentIndex].colspan += this.columnKeys.length;
} else {
currentIndex++;
this.years[currentIndex].year = String(item.year);
this.years[currentIndex].colspan = this.columnKeys.length;
}
} else {
this.years[currentIndex].year = String(item.year);
}
});
}
Но при запуске ng serve
я получаю следующий вывод:
AppComponent.html:1 ERROR TypeError: Cannot set property 'year' of undefined
at TabularComponent.fillYearsArray (tabular.component.ts:27)
at TabularComponent.push../src/app/tabular/tabular.component.ts.TabularComponent.ngOnInit (tabular.component.ts:22)
at checkAndUpdateDirectiveInline (core.js:18537)
at checkAndUpdateNodeInline (core.js:19801)
at checkAndUpdateNode (core.js:19763)
at debugCheckAndUpdateNode (core.js:20397)
at debugCheckDirectivesFn (core.js:20357)
at Object.eval [as updateDirectives] (AppComponent.html:1)
at Object.debugUpdateDirectives [as updateDirectives] (core.js:20349)
at checkAndUpdateView (core.js:19745)
Так чтоПохоже, что первый объект в массиве был бы неопределенным, но разве TS не должен знать, что у него есть свойство year
, которое изменяется для объекта при первой записи моего years
-array?