Estoy tratando de convertir next.js/examples/with-mongodb/util/mongodb.js a TS para poder almacenar en caché y reanudar mis conexiones a Mongo dentro de un proyecto TS next.js. Recibo un error de TS en cache.promise que dice: Type 'Promise<MongoClient | { client: MongoClient; db: Db; }>' is not assignable to type 'Promise<MongoClient>'
¿Cómo debo declarar correctamente la propiedad mongo en global para apaciguar a los dioses TS?
import { MongoClient, Db } from "mongodb"; const { DATABASE_URL, DATABASE_NAME } = process.env; declare global { namespace NodeJS { interface Global { mongo: { conn: MongoClient | null; promise: Promise<MongoClient> | null; }; } } } let cached = global.mongo; if (!cached) { cached = global.mongo = { conn: null, promise: null }; } async function connect() { if (cached.conn) { return cached.conn; } if (!cached.promise) { const opts = { useNewUrlParser: true, useUnifiedTopology: true, }; cached.promise = MongoClient.connect(DATABASE_URL, opts).then((client) => { return { client, db: client.db(DATABASE_NAME), }; }); } cached.conn = await cached.promise; return cached.conn; } export { connect };La propiedad ' conn ' que está almacenando contiene MongoClient y Db .
En su declaración global para mongo , solo ha incluido MongoClient . Tengo exactamente el mismo código en mi proyecto y la forma en que manejo esto es simplemente crear un tipo básico llamado MongoConnection que contiene ambos. Código a continuación.
type MongoConnection = { client: MongoClient; db: Db; }; declare global { namespace NodeJS { interface Global { mongo: { conn: MongoConnection | null; promise: Promise<MongoConnection> | null; } } } }parece que la respuesta es simplemente hacer que la propiedad mongo any como esta:
declare global { namespace NodeJS { interface Global { mongo: any; } } }