Mongoose对象不包含方法

drnojrws  于 2023-01-05  发布在  Go
关注(0)|答案(1)|浏览(109)

这是我的模特

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 文档中推荐的方法来做这件事。

neekobn8

neekobn81#

将方法接口添加到HydratedDocument,如下所示:

HydratedDocument<IUser, IUserMethods>

在我的代码中,我将此类型重新导出为HydratedUser,这样就不需要在所有地方重复边界:

export type HydratedUser = HydratedDocument<IUser, IUserMethods>;

我在任何地方都找不到这方面的明确文档,但我通过查看d.ts文件发现它期望“methods and overrides”接口作为第二个类型参数:
https://github.com/Automattic/mongoose/blob/5b62093cc9bcda8842e1be20ed33652547ef60fb/types/index.d.ts#L132

export type HydratedDocument<DocType, TMethodsAndOverrides = {}, TVirtuals = {}> = ...

相关问题