打字稿给我一个错误。该错误是由于以下事实造成的:猫鼬期望搜索的诺言将以猫鼬文档(在这种情况下为用户的文档)或“空”来解决。 但是我想访问所有用户的方法,因此我必须指定该函数将用户的模型作为参数。但这件事导致我以下错误:
类型'(user:UserModel)=>响应的参数不能分配给类型'(res:Document | null)=> void |回应| PromiseLike'。
这是代码:
import express, { Request, Response } from "express";
import User, { UserModel } from "../../models/User";
// router
const router = express.Router();
// @route GET api/user/username/:username
// @access Public
router.get("/username/:username", (req: Request, res: Response) => {
User.findOne({ username: req.params.username })
.then((user: UserModel | null) => res.json(user))
.catch(err => res.json(err));
});
export default router;
这是用户的型号:
import mongoose, { Schema, model } from "mongoose";
export type UserModel = mongoose.Document & {
name: string;
username: string;
email: string;
password: string;
avatar: string;
created_at: Date;
};
export const UserSchema = new Schema({
name: {
type: String,
required: true
},
username: {
type: String,
required: true,
unique: true
},
email: {
type: String,
unique: true
},
password: {
type: String,
required: true
},
avatar: {
type: String
},
created_at: {
type: Date,
default: Date.now
}
});
export default model("User", UserSchema);
答案 0 :(得分:1)
model
函数接受集合文档类型的类型参数。 (它信任您;它没有任何方法可以验证类型是否正确。)替换:
export default model("User", UserSchema);
具有:
export default model<UserModel>("User", UserSchema);
然后对该集合的所有查询将产生UserModel
个对象。