我正在尝试使用Typescript将我的模型与mongoose模式绑定。 我有我的IUser界面:
export interface IUser{
_id: string;
_email: string;
}
我的用户类:
export class User implements IUser{
_id: string;
_email: string;
}
我的RepositoryBase:
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,
}))
)
}
}
问题是打字稿编译器一直说: 类型'IUser'不满足约束'Document'
如果我这样做:
export interface IUser extends mongoose.Document
该问题已解决,但编译器说: “用户”
类型中缺少“属性'增量'真的,我不希望我的IUser扩展mongoose.Document,因为IUser或User都不应该知道Repository是如何工作的,也不是它的实现。
答案 0 :(得分:0)
我通过引用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