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

OpenAPI生成的ReactNative模型调用toISOString报Invalid Date错误如何解决?

问题根因

  • 生成的UserToJSON序列化逻辑仅判断了日期字段是否为undefined,未覆盖两种异常场景:
    1. 字段值为null:你的业务场景下未完成邮箱验证时emailVerifiedAt返回null,未命中现有判断逻辑,直接执行toISOString触发报错
    2. 字段为非法Date对象:如果后端返回的时间字符串格式不符合要求,反序列化后会生成Invalid Date,既不是undefined也不是null,调用toISOString同样会抛出相同错误
  • 此前运行正常是因为之前该字段要么返回合法Date,要么返回undefined,近期后端接口返回逻辑调整、或OpenAPI Generator配置/模板更新后,才触发了未兼容的分支
  • 你手动修改判断条件未生效的常见原因:直接修改了生成后的产物文件,再次执行生成命令后被默认模板覆盖;或者仅判断了null未处理非法Date场景。

解决方案

临时修复(紧急绕过问题)

传参前先清理User对象中的非法日期字段:

const cleanDate = (date?: Date | null) => {
  return date instanceof Date && !isNaN(date.getTime()) ? date : undefined
}

let parameter = {
  type: VerificationCodeType.Email,
  user: {
    ...context.state.user,
    emailVerifiedAt: cleanDate(context.state.user.emailVerifiedAt),
    phoneVerifiedAt: cleanDate(context.state.user.phoneVerifiedAt)
  }, 
};

永久修复(调整生成规则)

  1. 首先确认OpenAPI Schema中emailVerifiedAt、phoneVerifiedAt字段是否标注了nullable: true
  2. 自定义OpenAPI Generator的TypeScript序列化模板,将日期字段的序列化逻辑调整为兼容所有异常场景:
'email_verified_at': value.emailVerifiedAt instanceof Date && !isNaN(value.emailVerifiedAt.getTime()) ? value.emailVerifiedAt.toISOString().substr(0,10) : undefined,
'phone_verified_at': value.phoneVerifiedAt instanceof Date && !isNaN(value.phoneVerifiedAt.getTime()) ? value.phoneVerifiedAt.toISOString().substr(0,10) : undefined,

调整后重新生成模型代码即可永久解决该问题。

内容的提问来源于stack exchange,提问作者Fabio R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:39:04