这是我的模特
export interface IUser {
name: string;
email: string;
cart: {
items: { productId: Types.ObjectId; quantity: number }[];
};
}
interface IUserMethods {
addToCart(product: HydratedDocument<IProduct>): void;
}
type UserModel = Model<IUser, {}, IUserMethods>;
const userSchema = new Schema<IUser, UserModel, IUserMethods>({
name: { ... },
email: { ... },
cart: { ... },
});
userSchema.methods.addToCart = function (
this: HydratedDocument<IUser>,
product: HydratedDocument<IProduct>
) {
// Do something
return this.save();
};
const userModel = model<IUser>("User", userSchema);
我正在尝试使用一个用户对象,但是它不包含addToCart方法。另外,我如何键入一个用户对象?
PS:我正在尝试用 Mongoose 文档中推荐的方法来做这件事。
1条答案
按热度按时间neekobn81#
将方法接口添加到
HydratedDocument
,如下所示:在我的代码中,我将此类型重新导出为
HydratedUser
,这样就不需要在所有地方重复边界:我在任何地方都找不到这方面的明确文档,但我通过查看d.ts文件发现它期望“methods and overrides”接口作为第二个类型参数:
https://github.com/Automattic/mongoose/blob/5b62093cc9bcda8842e1be20ed33652547ef60fb/types/index.d.ts#L132