You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:54:00