#javascript #typescript
Вопрос:
У меня здесь есть определенный интерфейс:
interface Notification {
fullDate: string;
weekday: string;
info: {
title: string;
subtitle: string;
read: boolean;
};
}
Позже я определил константу такого типа:
const orderedNotifications: { [month: string]: Notification[] } = {};
Я получаю данные извне и использую цикл foreach, в котором я получаю список объектов с данными, полученными из тех же месяцев. Я хочу проверить, есть ли у объекта этот месяц в качестве ключа, и если нет, создайте его и перенесите все данные за аналогичные месяцы в этот ключ. Я пытался вот так:
orderedNotifications[month].push({
fullDate,
weekday,
info,
});
Где month
переменная с месяцем публикации. К сожалению, я получаю ошибку типа: Не удается прочитать свойства неопределенного (чтение «push»)
Ответ №1:
Вы получаете TypeError: Cannot read properties of undefined (reading 'push')
, потому month
что ключ не определен в orderedNotifications
объекте.
Используйте следующий код:
// This line will solve your issue as it is
// checking if the key already exist do nothing
// otherwise set empty array on it.
orderedNotifications[month] = orderedNotifications[month] || [];
orderedNotifications[month].push({
fullDate,
weekday,
info,
});
Ответ №2:
Просто добавьте галочку «если» и добавьте ее, если ее там еще нет… глупый я.
if (!(month in orderedNotifications)) {
orderedNotifications[month] = [
{
fullDate,
weekday,
info,
},
];
} else {
orderedNotifications[month].push({
fullDate,
weekday,
info,
});
}