【发布时间】:2022-01-22 21:13:24
【问题描述】:
考虑这个架构:
const Suspensions = new Schema({
guildId: {
type: String,
ref: 'guilds',
required: true
},
moderatorId: {
type: String,
required: true
},
userId: {
type: String,
required: true
},
reason: {
type: String,
required: true
},
fullFilled: {
type : Boolean,
required: false,
},
unSuspensionDate: {
type: String,
required: true
},
roles: [{
type: String,
required: true
}],
evidence: [{
type: String,
required: false
}],
caseId: {
type: String,
required: true
}
})
我想将 fullFilled 设置为 true 的更新函数。
export function unSuspend(
guildId: string,
userId: string | undefined
): Promise<Suspension>{
return new Promise<Suspension>(async (resolve, reject) => {
await Suspend.findOneAndUpdate(
{guildId: guildId, userId: userId},
{$set:{fullFilled: true}},
{new: true},
(err: any, doc: any) => {
if(err) reject(err)
resolve(doc)
}
)
})
}
它会在{$set:{fullFilled: true}} 上引发错误:
'ReadonlyPartial<_UpdateQueryDef<DeepPartial<any>>>'. Property '$set' is incompatible with index signature. Type '{ fullFilled: boolean; }' is not assignable to type 'DeepPartial<any>'. Property 'fullFilled' is incompatible with index signature.
我在用 JS 编写的旧项目中有完全相同的代码,它工作正常。既然我正在使用 TS,是什么导致了这个错误?我也尝试删除 $set:{} 包装器,但这也没有用。
【问题讨论】:
标签: node.js typescript mongodb mongoose