Typescript Mongoose类型脚本类

Typescript Mongoose类型脚本类,typescript,mongoose,Typescript,Mongoose,下面的类抛出错误 类型“typeof import”(“mongoose”)缺少类型“Db”中的以下属性:serverConfig、bufferMaxEntries、databaseName、options等 我无法找到mongoose.connect的返回类型 import mongoose from "mongoose"; import {Db} from "mongodb"; interface MongoDbConfig { server: String, port: S

下面的类抛出错误

类型“typeof import”(“mongoose”)缺少类型“Db”中的以下属性:serverConfig、bufferMaxEntries、databaseName、options等

我无法找到mongoose.connect的返回类型

import mongoose from "mongoose";
import {Db} from "mongodb";

interface MongoDbConfig {
   server: String, 
   port: String,
   dbName: String;
} 
// TODO: make singelton
class MongoDb {
    private db : Db;
    private _server : String;
    private _port : String;
    private _dbName : String;

    constructor(config: MongoDbConfig){
            this._server = config.server;
            this._port = config.port;
            this._dbName = config.dbName

    }

    public async connect() {
        const uri = "mongodb://"+this._server+":"+this._port+"/"+this._dbName;
        this.db = await mongoose.connect(uri, { useNewUrlParser: true }); // error
        console.log(typeof this.db)
        console.log("Connected to db");
        return this.db;
    }

    public getDb(){
        return this.db;
    }
}

我查过了文件:这是它的内容:

函数还接受回调参数并返回承诺

mongoose.connect(uri、选项、函数)(错误){
//检查初始连接中的错误。回调没有第二个参数。
});
//或者使用承诺
连接(uri,选项)。然后(
()=>{/**随时可用,`mongoose.connect()`promise解析为mongoose实例。*/},
err=>{/**句柄初始连接错误*/}
);
如您所见,它实际上返回了一个承诺,这个承诺解析为mongoose实例

我也检查了猫鼬的
索引.d.ts
,我发现:

/**
*打开默认的mongoose连接。
*传递的选项优先于连接字符串中包含的选项。
*@返回围绕此的伪承诺包装器
*/
导出函数connect(uri:string,options:ConnectionOptions,callback:(err:mongodb.MongoError)=>void):Promise;
导出函数connect(uri:string,callback:(err:mongodb.MongoError)=>void):承诺;
导出函数connect(uri:string,options?:ConnectionOptions):Promise;
因此,它看起来返回了
Promise
,因为您使用的是
async/await
,所以解析值将只是
Mongoose

顺便说一句,我不确定您在这里做什么,但我建议您在连接到数据库时只需按照文档进行操作:

mongoose.connect('mongodb://localhost/test“,{useNewUrlParser:true});
const db=mongoose.connection;
db.on('error',console.error.bind(console,'connectionerror:');
db.once('open',function(){
console.log('已成功连接到数据库')
});
您的
this.db
可能应该等于
mongoose.connection
,其类型为
mongoose.connection
,而不是
mongoose.connect(…)


希望这有帮助。

问题似乎来自于在
db
变量的代码中键入声明。类型定义提到,
connect
函数返回
Promise
,但
this.db
具有
db
类型,而不是
Mongoose

这可能会解决问题

private db: mongoose.Mongoose; // change from Db to mongoose.Mongoose

// ...

this.db = await mongoose.connect(uri, { useNewUrlParser: true }); 

希望它有帮助

您可以按如下方式使用它

import { connect, Mongoose } from 'mongoose';
//...
private db: Mongoose;
//...
this.db = await connect(uri, { useNewUrlParser: true });