TypeScript调用generateTimeObject传第二个参数后secondTimeValue仍为null问题
排查方向
- 先确认第二次调用时传入的
secondObject符合预期:是否为非空值,且对应分支下需要读取的time/someOtherTimeValue属性本身不是null/undefined。你可以在函数开头增加日志打印secondObject的完整结构、以及目标属性的取值。 - 检查
condition判断逻辑是否符合预期:如果第二次调用时condition的判断结果不符合你的预期,会走入错误分支,刚好对应分支下secondObject的目标属性不存在,就会返回null。建议增加日志打印condition的取值,确认进入的分支正确。 - 确认
firstObject的属性赋值是否生效:如果firstObject是被Proxy代理的响应式对象(如Vue/React框架的状态对象)、或者被Object.freeze冻结,可能会导致第二次赋值customValues被拦截不生效。你可以在给firstObject.customValues赋值完成后,立即打印该属性的取值,如果刚赋值完成时结果正确,后续才变成null,说明是其他位置的代码修改了该属性值。 - 确认两次调用传入的
firstObject是同一个引用:如果第二次调用时传入的是第一次firstObject的深拷贝对象,你查看的仍然是原始对象的属性,就会看到旧值。可以给firstObject增加唯一标识属性,两次调用时打印标识确认是同一个对象。
快速调试代码
你可以把函数修改为以下版本增加日志,快速定位问题:
private generateTimeObject(firstObject: someInterface, secondObject?: someInterface) { // 新增调试日志 console.log('=====函数调用开始=====') console.log('入参secondObject:', secondObject) console.log('当前condition值:', condition) let firstTime; let secondTime; if (condition) { firstTime = firstObject.time; secondTime = secondObject ? secondObject.time : null; // 新增分支日志 console.log('进入if分支,secondObject.time值为:', secondObject?.time) } else { firstTime = firstObject.someOtherTimeValue; secondTime = secondObject ? secondObject.someOtherTimeValue : null; // 新增分支日志 console.log('进入else分支,secondObject.someOtherTimeValue值为:', secondObject?.someOtherTimeValue) } firstObject.customValues = { firstTimeValue: firstTime, secondTimeValue: secondTime }; // 新增赋值后日志 console.log('赋值后customValues:', firstObject.customValues) console.log('=====函数调用结束=====') }
内容的提问来源于stack exchange,提问作者jefomem598
相关产品推荐
相关产品推荐

