Búsqueda de sitios web

mongodb - Cómo escribir un arreglo de ObjectID de Mongoose en TypeScript


Estoy teniendo un problema con la tipificación en TypeScript y el esquema de mongoose. Tengo el siguiente modelo para un usuario:

export interface IUser extends mongoose.Document {
    firstname: string;
    lastname: string;
    email: string;
    password?: string;
    lang: string;
    color: string;
    roles: IRole[];
    labs: ILab[];
}

export const UserSchema = new mongoose.Schema({
    firstname: {
        type: String,
        required: [true, 'Firstname required']
    },
    lastname: {
        type: String,
        required: [true, 'Lastname required']
    },
    email: {
        type: String,
        required: [true, 'Email required']
    },
    password: {
        type: String,
        required: [true, 'Password required']
    },
    lang: {
        type: String,
        required: [true, 'Lang required']
    },
    color: {
        type: String,
        required: [true, 'Color required']
    },
    roles: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Role'
        }
    ],
    labs: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Lab'
        }
    ]
});

La cosa es que quiero hacer una consulta para recuperar todos los usuarios que coincidan con un ID de laboratorio específico, así que hice esto:

User.find({ labs: { $in: req.params.id } })

Pero tengo un error con TypeScript porque el find en realidad está en un array de ObjectId, pero en la interfaz se relaciona con ILab[].

La única manera que encontré es hacer la consulta como Any, pero como sabrás no es ideal usar Any. ¿Sería bueno si alguien tuviera una pista sobre eso?

Respuesta #1

Quizás solo:

import { Schema } from "mongoose";
interface IUser extends mongoose.Document {
  ...
  labs: [{ type: mongoose.Schema.Types.ObjectId, ref: "Lab" }];
}

Tuve el mismo problema y lo arreglé de esta manera.

Artículos relacionados