TypeScript如何向对象可能不存在的键对应数组推送数据
错误原因
你初始化的orderedNotifications是空对象,首次访问某个不存在的month属性时,返回值为undefined,调用undefined的push方法就会触发该 TypeError。
解决方案
在执行push操作前,先判断对应月份的键是否存在,不存在则先初始化为空数组即可,有以下几种常用写法:
- 基础判断写法,兼容性最好,逻辑直观:
// 不存在对应月份键时初始化空数组 if (!orderedNotifications[month]) { orderedNotifications[month] = []; } orderedNotifications[month].push({ fullDate, weekday, info, });
- 空值合并运算符简化写法,更简洁,且只会在属性值为
undefined/null时才初始化,不会误覆盖空数组等合法值:
orderedNotifications[month] = orderedNotifications[month] ?? []; orderedNotifications[month].push({ fullDate, weekday, info, });
- 极简一行写法,适合熟悉语法的场景使用:
(orderedNotifications[month] ?? (orderedNotifications[month] = [])).push({ fullDate, weekday, info, });
内容的提问来源于stack exchange,提问作者Stephan Psaras
相关产品推荐
相关产品推荐

