TypeScript对接Mailjet发信报message.To.map is not a function如何解决
问题排查思路
TypeError: xxx.map is not a function 报错的核心原因是运行时调用map方法的message.To不是数组类型,TypeScript的类型断言仅在编译期生效,不会对JSON.parse返回的运行时值做任何校验,所以你定义的Message接口不代表实际解析出来的对象符合结构。
具体排查步骤
- 第一步先打印运行时
message.To的实际值和类型,确认异常值:
常见的异常情况包括:console.log('message.To 值:', message.To) console.log('是否为数组:', Array.isArray(message.To)) console.log('实际类型:', typeof message.To)undefined、null、单个Recipient对象、字符串/数字等非数组类型。 - 第二步检查上游
queueMessage的生成逻辑:- 确认字段大小写是否匹配:你定义的接口中是大写开头的
To,如果上游生成JSON时用的是小写to,解析后message.To就是undefined - 确认单收件人场景下的处理:很多时候上游生成数据时,如果只有一个收件人会直接赋值为单个对象,而不是包成长度为1的数组
- 确认
queueMessage的JSON格式是否合法,是否存在字段缺失、结构错误的问题
- 确认字段大小写是否匹配:你定义的接口中是大写开头的
- 第三步加运行时兜底校验,避免报错:
不要直接依赖TS类型断言,先对message.To做兼容处理再调用map:// 兼容非数组情况,非数组时自动转成单元素数组,空值时转成空数组 const safeTo = Array.isArray(message.To) ? message.To : (message.To ? [message.To] : []) const emailMessage = { // 额外提醒:这里你之前的代码逻辑有误,To数组里的元素不需要包From字段,直接放收件人信息即可,From是发件人配置应该放在外层 To: safeTo.map(t => ({ Email: t.email, Name: t.emailAlias })) }
内容的提问来源于stack exchange,提问作者user826323
相关产品推荐
相关产品推荐

