类型“文档”缺少类型中的以下属性
Posted
技术标签:
【中文标题】类型“文档”缺少类型中的以下属性【英文标题】:Type 'Document' is missing the following properties from type 【发布时间】:2020-04-09 16:59:00 【问题描述】:所以我有一个 Node /w Typescript REST API,我有一个注册方法,它创建一个用户并使用创建的用户 firstName、lastName、email 进行响应。
问题是我遇到了这个打字稿错误,上面写着“类型'文档'缺少来自类型'SavedUser'的以下属性:名字,姓氏,电子邮件”。
我相信在我的 SavedUser 界面中添加 mongoose.Document 类型会有所帮助,我不确定,谢谢您的帮助!
错误截图:
示例代码:
interface SavedUser
firstName: string
lastName: string
email: string
...
public async signUp(req: Request, res: Response): Promise<void | Response>
const salt: string = await bcrypt.genSalt(10)
const hashedPassword: string = await bcrypt.hash(req.body.password, salt)
const user = new User(
firstName: req.body.firstName,
lastName: req.body.lastName,
email: req.body.email,
password: hashedPassword
)
try
const firstName, lastName, email : SavedUser = await user.save()
return res.status(200).send(
firstName,
lastName,
email
)
catch (err)
return res.status(400).send(err)
【问题讨论】:
user.save()
返回什么?
【参考方案1】:
我不知道问题到底出在哪里,但这就是我使用 TypeScript 创建猫鼬模式的方式,它对我有用。
import * as mongoose from 'mongoose';
interface SavedUserDocument extends mongoose.Document
firstName: string;
lastName: string;
email: string;
const SavedUserSchema = new mongoose.Schema(...);
export const SavedUser = mongoose.model<SavedUserDocument>('saveduser', SavedUserSchema);
希望它也对你有用。
【讨论】:
【参考方案2】:Mongoose 在 .save()
上返回更多,然后您当前使用 SavedUser 界面指定。
从 Mongoose 获取所有类型的最简单方法是使用导出的 Document
并扩展您的界面。
import Document from 'mongoose';
export interface SavedUser extends Document
email: string;
firstName: string;
lastName: string;
【讨论】:
【参考方案3】:感谢您的回答,我解决了!我混合了dijkstra 和phw 的答案并想出了这个:
在我的用户模型中
//user.ts
import Schema, model, Document from 'mongoose'
const userSchema = new Schema(
firstName:
type: String,
required: true,
min: 2,
max: 255
,
lastName:
type: String,
required: true,
min: 2,
max: 255
,
email:
type: String,
required: true,
unique: true,
min: 6,
max: 255
)
export interface SavedUserDocument extends Document
firstName: string;
lastName: string;
export const userSchemaModel = model<SavedUserDocument>('User', userSchema)
现在在我的用户控制器上:
//user.ts
import userSchemaModel, SavedUserDocument from '../../models/user/user'
...
public async signUp(req: Request, res: Response): Promise<void | Response>
const user = new userSchemaModel(
firstName: req.body.firstName,
lastName: req.body.lastName,
email: req.body.email
)
try
const firstName, lastName : SavedUserDocument = await user.save()
return res.status(200).send(
firstName,
lastName,
message: 'User created'
)
catch (err)
return res.status(400).send(err)
...
我确实有一个问题;
如果我删除了model<SavedUserDocument>('User', userSchema)
中的<SavedUserDocument>
,我仍然会收到错误消息,我可以对此有一个很好的解释吗?我对 Typescript 还是比较陌生,希望能得到解释,非常感谢!
【讨论】:
以上是关于类型“文档”缺少类型中的以下属性的主要内容,如果未能解决你的问题,请参考以下文章
与 Typescript 反应 - 类型 缺少类型中的以下属性
如何修复 Typescript 中的“以下属性中缺少类型''...”错误?
类型“订阅”缺少类型“可观察<StringMap<any>>”中的以下属性
VS Code 中的 Vue Array Prop JSDoc TypeScript 错误:“ArrayConstructor”类型缺少“MyCustomType []”类型中的以下属性