无法在 NodeJS 中使用 Mongoose 和 Typescript 扩展基类

Posted

技术标签:

【中文标题】无法在 NodeJS 中使用 Mongoose 和 Typescript 扩展基类【英文标题】:Cannot extend base class with Mongoose and Typescript in NodeJS 【发布时间】:2016-11-19 21:52:02 【问题描述】:

我正在尝试在 NodeJS 中使用 Mongoose 4.5.4 和 it's typings 和 Typescript(显然)同时使用存储库模式。

存储库库:

export class RepositoryBase<T extends mongoose.Document> implements IRead<T>, IWrite<T> 
    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);
    

    //......
    //Additional CRUD methods excluded for brevity

用户存储库:

export class UserRepository extends RepositoryBase<IUserModel> 
    constructor() 
        super(UserSchema);
    

我在从UserRepository 调用super() 时遇到以下类型错误

[ts] Argument of type '<U>(name: string) => IModelConstructor<U> & EventEmitter' is not assignable to parameter of type 'IModelConstructor<Document> & EventEmitter'. Type '<U>(name: string) => IModelConstructor<U> & EventEmitter' is not assignable to type 'IModelConstructor<Document>'. Property 'findById' is missing in type '<U>(name: string) => IModelConstructor<U> & EventEmitter'. import UserSchema

有人知道为什么吗?我创建模型 (UserSchema) 非常简单: let model = mongooseConnection.model&lt;IUserModel&gt;("Users", UserSchema.schema);

我将非常感谢朝着正确的方向前进。

【问题讨论】:

在此处查看 2 个解决方案:***.com/questions/34482136/…(免责声明:其中一个是我的) 【参考方案1】:

做一个简单的export const model = mongooseConnection.model&lt;IUserModel&gt;("Users", UserSchema.schema); 就足以解决这个打字问题。

【讨论】:

以上是关于无法在 NodeJS 中使用 Mongoose 和 Typescript 扩展基类的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongoose 和 NodeJs 在 Mongodb 的数组字段中插入数据

无法得到我在 nodejs / mongoose / bluebird 中返回的承诺

我无法使用 Mongoose 在 MongoDB 中保存或查找文档

nodejs+express+mongoose无法获取数据库数据问题解决

如何使用 Nodejs/mongodb/mongoose 在 ejs/html 中显示数据库项目?

NodeJS Mongoose record.save TypeError