OpenAPI生成的ReactNative模型调用toISOString报Invalid Date错误如何解决?
问题根因
- 生成的
UserToJSON序列化逻辑仅判断了日期字段是否为undefined,未覆盖两种异常场景:- 字段值为
null:你的业务场景下未完成邮箱验证时emailVerifiedAt返回null,未命中现有判断逻辑,直接执行toISOString触发报错 - 字段为非法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) }, };
永久修复(调整生成规则)
- 首先确认OpenAPI Schema中
emailVerifiedAt、phoneVerifiedAt字段是否标注了nullable: true - 自定义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.
相关产品推荐
相关产品推荐

