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

13 浏览
0 Comments

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

我正在尝试在使用Typescript的NodeJS中使用Mongoose 4.5.4和它的类型定义,并利用仓库模式。

RepositoryBase:

export class RepositoryBase implements IRead, IWrite {
    private _model: mongoose.Model;
    constructor(schemaModel: mongoose.Model) {
        this._model = schemaModel;
    }
    create(item: T): mongoose.Promise> {
        return this._model.create(item);
    }
    //......
    //为简洁起见,省略了其他CRUD方法
}

UserRepository:

export class UserRepository extends RepositoryBase {
    constructor() {
        super(UserSchema);
    }
}

在调用`UserRepository`的`super()`时,我遇到了以下类型错误:

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

有人知道为什么吗?我的模型(`UserSchema`)的创建非常简单:

let model = mongooseConnection.model("Users", UserSchema.schema);

非常感谢对正确方向的指导。

0
0 Comments

在使用Mongoose和Typescript开发NodeJS应用时,出现了无法通过继承基类的问题。问题的解决方法是通过简单的导出语句来解决类型问题。

具体来说,在开发过程中,我们使用了Mongoose来连接MongoDB数据库,并使用Typescript来进行类型检查。在某个地方,我们需要定义一个模型并继承一个基类。然而,当我们尝试继承基类并导出模型时,遇到了一个类型错误的问题。

为了解决这个问题,我们尝试了一种简单的方法。我们使用了mongooseConnection.model方法来定义模型,并指定了模型的类型IUserModel。具体代码如下:

export const model = mongooseConnection.model<IUserModel>("Users", UserSchema.schema);

这个简单的导出语句足以解决类型问题,使我们能够继承基类并导出模型。通过指定模型的类型,我们可以确保在使用模型时进行类型检查,避免潜在的错误。

总结起来,无法通过继承基类的问题是由于在使用Mongoose和Typescript开发NodeJS应用时遇到的类型错误。解决方法是使用mongooseConnection.model方法来定义模型,并指定模型的类型。这样可以确保在使用模型时进行类型检查,提高代码的可靠性。

0