在全局缓存Mongoose连接时出现的TypeScript错误:Promise无法赋值
我正在尝试在一个使用TypeScript的 Node.js/Next.js项目中,使用Mongoose创建一个可重用的MongoDB连接函数。
为了在热重载期间防止重复连接,我把连接缓存在全局对象上。
然而,我在把 mongoose.connect() 赋给缓存的Promise那一行遇到了类型错误。
错误:
Type 'Promise<typeof import("mongoose")>' is not assignable to type 'Promise<{ conn: ... | null; promise: Promise<...> | null; }>'.
Type 'typeof import("mongoose")' is missing the following properties from type '{ conn: ... | null; promise: Promise<...> | null; }': conn, promise
connectDB代码:
import mongoose from "mongoose";
const MONGO_URI = process.env.MONGO_URI;
if (!MONGO_URI) throw new Error("Mongo db url not define.");
let cached = global.mongoose;
if (!cached) {
cached = global.mongoose = { conn: null, promise: null };
};
export const connectDB = async () => {
if (cached.conn) return cached.conn;
if (!cached.promise) {
cached.promise = mongoose.connect(MONGO_URI);
}
try {
cached.conn = await cached.promise;
} catch (error) {
cached.promise = null;
throw error;
}
return cached.conn;
};
global.d.ts
import mongoose from "mongoose";
declare global {
var mongoose: {
conn: typeof mongoose | null;
promise: Promise<typeof mongoose> | null;
};
};
我本以为类型会匹配,因为 mongoose.connect() 会返回 Promise<typeof mongoose>。
在TypeScript中,对存储在全局对象上的缓存的mongoose连接进行类型标注,正确的做法是什么?
非常感谢任何帮助。
解决方案
mongoose.connect() 返回 Promise<Mongoose>,而不是 Promise<typeof mongoose>。Mongoose 类型是连接实际返回的实例类型。
// global.d.ts
import type { Mongoose } from "mongoose";
declare global {
var mongoose: {
conn: Mongoose | null;
promise: Promise<Mongoose> | null;
};
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。