Как передать данные в ключ объекта, который, возможно, еще не существует в typescript

#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,
      });
    }