node.js – Mongoose Typescript – >导出模型接口

前端之家收集整理的这篇文章主要介绍了node.js – Mongoose Typescript – >导出模型接口前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想只导出我的模型的接口而不是Document,这样如果不在我自己的类方法中,没有人可以修改我的模型.我已经定义了这样的接口和架构:

IUSER:

interface IUser {
  _id: string;
  name: string;
  email: string;
  created_at: number;
  updated_at: number;
  last_login: number;
}

架构:

let userSchema: Mongoose.Schema = new Mongoose.Schema({
   'name': String,'email': String,'created_at': {'type': Date,'default': Date.now},'updated_at': {'type': Date,'last_login': {'type': Number,'default': 0},});

interface UserDocument extends IUser,Mongoose.Document {}

然后是模型

// Model
let Users: Mongoose.Model<UserDocument> = Mongoose.model<UserDocument>('User',userSchema);

所以我只是导出IUser和一个类用户,基本上有所有方法来更新我的模型.

问题是打字稿抱怨如果我将_id添加到我的界面,但我实际上需要它,否则我将需要传递UserDocument,这就是我不想做的事情.错误打字稿给我的是:

错误TS2320:接口’UserDocument’不能同时扩展类型’IUser’和’Document’.
类型’IUser’和’Document’的命名属性’_id’不相同.

我有什么想法可以将_id属性添加到我的界面?

谢谢!

解决方法

尝试:
interface UserDocument extends IUser,Mongoose.Document {
   _id: string;
}

它将解决IUser._id(string)与Mongoose.Document._id(any)之间的冲突.

更新:

正如评论中所指出的,目前它为“Document”中的成员提供了不兼容的覆盖,因此必须使用另一种解决方法. Intersection types是可以使用的解决方案.也就是说,可以做到以下几点:

type UserDocument = IUser & Mongoose.Document;

或者,如果您不再需要UserDocument:

// Model
let Users = Mongoose.model<IUser & Mongoose.Document>('User',userSchema);

值得注意的是,此解决方案存在副作用.冲突的属性将具有相交的类型,因此IUser._id(string)&例如,Mongoose.Document._id(any)导致UserDocument._id(any).

猜你在找的Node.js相关文章