我正在尝试使用typescript将模型与mongoose模式绑定。
我有iuser接口:

export interface IUser{

   _id: string;

   _email: string;
}

我的用户类:
export class User implements IUser{
  _id: string;
  _email: string;
}

我的存储库:
export class RepositoryBase<T extends mongoose.Document> {

 private _model: mongoose.Model<mongoose.Document>;

  constructor(schemaModel: mongoose.Model<mongoose.Document>) {
     this._model = schemaModel;
  }

 create(item: T): mongoose.Promise<mongoose.model<T>> {
    return this._model.create(item);
 }
}

最后是我的userrepository,它扩展了repositorybase并实现了一个iuserrepository(实际上是空的):
export class UserRepository  extends RepositoryBase<IUser> implements     IUserRepository{

  constructor(){
    super(mongoose.model<IUser>("User",
        new mongoose.Schema({
            _id: String,
            _email: String,
        }))
    )
  }

}
问题是typescript编译器一直在说:
类型“iuser”不满足约束“document”
如果我这样做了:
export interface IUser extends mongoose.Document

这个问题解决了,但是编译器说:
类型“user”中缺少属性“increment”
事实上,我不想让我的用户扩展MangoSo.Debug,因为无论是用户还是用户都不应该知道库是如何工作的,也不知道它是如何实现的。

最佳答案

我通过引用this blog post解决了这个问题。
诀窍是从Document扩展mongoose接口,如下所示:

import { Model, Document } from 'mongoose';

interface User {
  id: string;
  email: string;
}

interface UserModel extends User, Document {}

Model<UserModel> // doesn't throw an error anymore

08-25 13:47