typescript 给我一个错误。该错误是由于 mongoose 期望搜索 promise 将使用 mongoose 文档(在本例中为用户文档)或“null”解析。 但是我想访问所有用户的方法,所以我必须指定该函数将用户的模型作为参数。但是这件事导致我出现以下错误:
“(user: UserModel) => Response”类型的参数不可分配给“(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);
最佳答案
model
函数接受集合文档类型的类型参数。 (它信任你;它没有任何方法来验证类型是否正确。)替换:
export default model("User", UserSchema);
与:
export default model<UserModel>("User", UserSchema);
然后对该集合的所有查询都将生成 UserModel
对象。
关于javascript - UserModel 不可分配给文档类型的参数 | nulll [带 typescript 的 Mongoose ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53021514/