【问题标题】:What is the type for Mongoose collection model when using TypeScript使用 TypeScript 时 Mongoose 集合模型的类型是什么
【发布时间】:2021-03-19 01:12:54
【问题描述】:

大家好,这是我第一次使用 TypeScript,所以我想构建一个 Auth 控制器类,它在构造函数和许多其他函数中采用 mongoose 模型,但我似乎找不到我面临的问题猫鼬模型的数据类型/类型

当我将鼠标悬停在猫鼬模型上时,我看到以下内容:const model: Model<Document, {}>

  • 所以我认为Model 是我需要指定的类型

这就是我厌倦制作这个构造函数的原因

import { Model } from "mongoose";

class AuthController {
  constructor(userModel: Model) {}
}
  • 但我收到此错误消息:Generic type 'Model<T, QueryHelpers>' requires between 1 and 2 type arguments.t

  • 我能在这方面获得一些帮助吗?我试图避免使用 any 数据类型,因为我想确保构造函数接受那些指定的参数类型

【问题讨论】:

  • 我以前从未使用过带有猫鼬的构造函数。模型类型可以定义为Model<User>,您必须在其中定义用户。 interface User { name: string; }

标签: typescript mongoose


【解决方案1】:

你应该可以解决这个问题

Model<UserDocument>

其中UserDocument 是扩展猫鼬Document 类型的类型,例如:

import { Document } from 'mongoose';
UserDocument = Document & { email: string } // Whatever user fields you have

解决此问题的另一种方法是将您的用户模型从其文件中导出:

export default mongoose.model<UserDocument>('User', UserSchema)

然后在构造函数中使用导出的模型

import UserModel from "./user-model";

class AuthController {
  constructor(userModel: UserModel) {}
}

【讨论】:

  • 快速提问,所以即使我将 Document 作为数据类型传递,它仍然可以作为有效的猫鼬模型保存?
  • 那是模型的数据类型。所以这就是模型在查询时将返回的内容,等等。Model&lt;UserDocument&gt; 说“这是一个猫鼬模型,它对 UserDocuments 进行操作(查找、更新等)”
  • 好的,但是当我在构造函数中编写 userModel: Document 实例时,我尝试使用 .findOne() 方法,我收到以下方法不可用的错误
  • 这是正确的 - Document 不是正确的类型。 Model&lt;Document&gt; 是。但这不会在您的实际文档中包含任何元数据,因此 Model&lt;UserDocument&gt; 将是这里的方式。
  • 哦,是的,我明白你的意思了,谢谢,现在它运行良好,非常感谢...
猜你喜欢
  • 2021-10-17
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多