在全局缓存Mongoose连接时出现的TypeScript错误:Promise无法赋值

前端开发 2026-07-12

我正在尝试在一个使用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章