首页 > 解决方案 > TypeScript 的 Mongoose loadClass 问题

问题描述

我正在利用猫鼬类模式

并为我的 Node 项目使用 TypeScript。

我遵循Mongoose 的 Typescript 方式......?确保我的模型知道我定义的模式,所以我有自动完成等。

然而,模式类变得更加棘手。正如他们的文档中所写:

loadClass() 函数允许你从 ES6 类中引入方法、静态和虚拟。类方法映射到模式方法,静态方法映射到模式静态,getter/setter 映射到虚拟。

所以我的代码看起来像:

interface IUser extends mongoose.Document {
  firstName: string,
  lastName: string
};

const userSchema = new mongoose.Schema({
  firstName: {type:String, required: true},
  lastName: {type:String, required: true},
});

class UserClass{
   static allUsersStartingWithLetter(letter: string){
       return this.find({...});
   }
   fullName(this: IUser){
      return `${this.firstName} ${this.lastName}`
   }
}
userSchema.loadClass(UserClass);

const User = mongoose.model<IUser>('User', userSchema);
export default User;

我的目标是 TypeScript 能够理解:

  1. User有方法allUsersStartingWithLetter
  2. User实例有一个方法fullName

在当前配置中它没有。我自己无法完成。

标签: javascriptnode.jsmongodbtypescriptmongoose

解决方案


UserClass需要Modelmongoose. 您似乎缺少一些必需的代码来使这项工作为您服务。

从您作为参考共享的链接中,这里有一个指南,应该可以通过完整的代码示例解决您的问题。

https://stackoverflow.com/a/58107396/1919397


推荐阅读