我无法让它读取对象中的单个属性。下面的代码给我一个undefined当我尝试读取_id。
interface SINGLEUSER {
_id:string,
name:string,
email:string,
image:string,
emailVerified: any
}
console.log("UPDATE" )
const user_:SINGLEUSER = JSON.stringify(user) as unknown as SINGLEUSER
//Undefined
console.log(user_._id)
//Works
console.log(user_)
console.log(account!!.provider)
await User_.findOneAndUpdate({_id:user_._id },{provider: account!!.provider})
console.log("UPDATED" )
输出:
UPDATE未定义的凭据UPDATED
但是如果我只记录整个user对象,它会显示右:
{"_id":"645e2c7e31041f8404b8a260","name":"Max Mustermann ","email":"max.mustermann@t-online.com","image":"https://...","emailVerified":null}
3条答案
按热度按时间de90aj5v1#
使用JSON.parse代替JSON.stringify
wgx48brx2#
JSON.stringify
将对象转换为字符串,因此除非使用JSON.parse
解析对象,否则无法访问对象的属性。为什么要使用
JSON.stringify
?r3i60tvu3#
这将帮助您:
您可以使用类,因为它们的工作方式类似于TS中的类型/接口:
然后你可以像这样创建一个对象清理器/解析器函数:
这个函数将为类型类的每个键循环,并从对象中只获取类型类中存在的键,然后创建一个新对象并返回它。你可以这样使用它:
请注意,现在
user_
变量来自SINGLEUSER
类型,如果您尝试从中获取otherPropNotListed
,TS将显示错误,因为它不存在于SINGLEUSER
类型中。这适用于任何对象,你想清除/类型的基础上类没有任何TS错误
Here's a code sandbox example
或者,如果您愿意,也可以使用simplified版本