Typescript Mongoose类型脚本类
下面的类抛出错误 类型“typeof import”(“mongoose”)缺少类型“Db”中的以下属性:serverConfig、bufferMaxEntries、databaseName、options等 我无法找到mongoose.connect的返回类型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
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 });