TypeScript中读取对象_id属性返回undefined的问题求助
无法读取对象单个属性的问题排查及解决
问题核心原因
你的代码存在一个关键错误:
const user_:SINGLEUSER = JSON.stringify(user) as unknown as SINGLEUSER
JSON.stringify(user)会把对象转换成JSON格式的字符串,而非保留原对象结构。虽然TypeScript的类型断言让它看起来是SINGLEUSER类型,但本质上user_是一个字符串。字符串本身没有_id属性,所以user_._id返回undefined;而直接打印字符串时,控制台显示的JSON格式内容视觉上和对象相似,才造成了“对象存在属性但读不到”的错觉。
解决方案
根据user的实际类型选择对应方案:
方案1:原user已是符合结构的对象
直接移除JSON.stringify,仅保留必要的类型断言(如果需要):
const user_: SINGLEUSER = user as unknown as SINGLEUSER;
如果user的类型本身兼容SINGLEUSER,甚至可以省略类型断言。
方案2:原user是JSON字符串(此场景下大概率不适用)
如果user本身是JSON格式的字符串,需要用JSON.parse将其转换为对象:
const user_: SINGLEUSER = JSON.parse(user) as unknown as SINGLEUSER;
修正后的完整代码示例
interface SINGLEUSER { _id:string, name:string, email:string, image:string, emailVerified: any } console.log("UPDATE" ) // 修正:直接使用原对象,避免不必要的字符串转换 const user_:SINGLEUSER = user as unknown as SINGLEUSER console.log(user_._id) // 现在会输出正确的_id值 console.log(user_) console.log(account!!.provider) await User_.findOneAndUpdate({_id:user_._id },{provider: account!!.provider}) console.log("UPDATED" )
修改后,user_会是真正的对象,能够正常读取_id属性,数据库更新操作也能正确执行。
内容的提问来源于stack exchange,提问作者Captai-N
相关产品推荐
相关产品推荐

