Estoy usando el controlador nativo mongodb ( npmjs.com/mongodb ) para node.js.
Tengo una colección con la siguiente interfaz:
interface Users { name: string; age: number; favoriteFood: string; }Tengo que consultar esta colección como:
const filter = { name: "lily" }; DB.collection("Users").find(filter); Ahora, ¿cómo definiré el tipo de esa variable de filter ? Podría usar algo como Record<string, any> . Pero eso es muy amplio.
const filter: Record<string, any> = { nmae: "lily" } // see the miss typed name. Gives no errors. // but I'd like to see a little type checking there.así que lo intenté
const filter: Partial<Record<keyof Users, any>> = { name: "lily" } // this force me to use the same keys as in schema. Ahora, ¿hay alguna forma de evitar any tipo en el código anterior? Para que admita todo tipo de filtros y operadores como $gt , $lt , etc.
Básicamente, debe importar el tipo de Filter de mongodb y luego simplemente usarlo.
const filter: Filter<User> = {}Por ejemplo, digamos que desea crear una función que reciba un objeto de filtro.
function find(filter: Filter<User> = {}) { return Db.collection<User>("users").find(filter).toArray(); } Ahora puede llamar a esta función y tener la sugerencia de autocompletar. también puede usar diferentes operadores como $in .