#javascript #node.js #mongodb #typescript #express
#javascript #node.js #mongodb #typescript #выразить
Вопрос:
Итак, у меня есть эта небольшая функция, которая заботится об обновлении документа todo в базе данных, это выглядит так
async function update({id, ...todoInfo }: ITodo) { // this line here
const db = await makeDb()
const foundTodo = await db.collection('todos').updateOne({ _id: transformId(id) }, { $set: { ...todoInfo } })
return foundTodo.modifiedCount > 0 ? { _id: id, ...todoInfo } : null
}
id
Свойство должно исходить из объекта req.params, а ...todoInfo
свойство — из объекта req.body . Но typescript выдает ошибку, которая property id does not exist on interface ITodo
. Как мне преодолеть эту проблему? Интерфейс ITodo в настоящее время выглядит следующим образом,
export interface ITodo {
todo_name: string
start_time: Date
end_time: Date
description: string
priority: Priority
}
Я попробовал этот метод, но это привело к вложенности объектов таким образом.. {todoInfo: {todo_name...}}
async function update({id, ...todoInfo }: {id: string, todoInfo: ITodo}) {
const db = await makeDb()
const foundTodo = await db.collection('todos').updateOne({ _id: transformId(id) }, { $set: { ...todoInfo } })
return foundTodo.modifiedCount > 0 ? { _id: id, ...todoInfo } : null
}
Я не хочу добавлять свойство id
в интерфейс, потому что либо я продолжаю использовать его везде, либо я мог бы сделать его необязательным, что приведет к путанице с другими вызовами функций, потому id
что свойство не может быть неопределенным. Большое вам спасибо.
Ответ №1:
Вы можете использовать тип пересечения:
async function update({ id, ...todoInfo }: { id: string } amp; ITodo) {
//...
}