TypeScript 的 Mongoose loadClass 问题

Posted

技术标签:

【中文标题】TypeScript 的 Mongoose loadClass 问题【英文标题】:Mongoose loadClass issue with TypeScript 【发布时间】:2019-12-04 20:06:33 【问题描述】:

我正在利用猫鼬class schemas。

并在我的 Node 项目中使用 TypeScript。

我已经关注 Mongoose the Typescript way...? 以确保我的模型知道我定义的架构,所以我已经自动完成等。

但是,使用模式类变得更加棘手。 正如他们的文档中所写:

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 能够理解:

    User 有一个方法 allUsersStartingWithLetter User 实例有一个方法 fullName

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

【问题讨论】:

您能告诉我您是如何创建新模型的吗?你不能使用 model.create(你的道具),你必须使用 new User().save()。如果你这样做,它正在工作。 (我有同样的问题) 【参考方案1】:

您的UserClass 需要从mongoose 扩展Model。您似乎缺少一些必需的代码来为您工作。

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

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

【讨论】:

不,不需要从文档扩展。请参阅文档:mongoosejs.com/docs/4.x/docs/advanced_schemas.html 它应该可以在不从 Document 扩展的情况下工作。

以上是关于TypeScript 的 Mongoose loadClass 问题的主要内容,如果未能解决你的问题,请参考以下文章

typescript 使用TypeScript和MongoDb的Mongoose示例

typescript 使用TypeScript和MongoDb的Mongoose示例

Mongoose 的 loadClass() 和 TypeScript

graphql + mongoose + typescript,如何减少重复的模型定义

使用 Typescript 从 Mongoose 模型访问文档属性

带有 Typescript 的 Mongoose Schema - 设计错误