Estoy trabajando en un componente de filtro para mi aplicación web React y quiero devolver (pasar a través de accesorios) una serie de condiciones para la consulta de Firestore.
Por ejemplo, si el usuario desea filtrar las publicaciones sin comentarios, marca una casilla de verificación y se agrega un where("commentsCount", ">", "0") a la matriz de filtros.
const queryParams = [ collection(db, "posts"), orderBy(sortType, sortMethod), limit(POSTS_PER_PAGE), ]; const filters = [ where("commentsCount", ">", "0"), // And possibly more where's ]; queryParams.push(...filters); // Create a firestore query object using the parameters const _query = query(...queryParams); Pero hacer esto me da un error de TypeScript: A spread argument must either have a tuple type or be passed to a rest parameter. TS2556 .
¿Qué estoy haciendo mal?
No puede pasar un argumento de tipo (CollectionReference<DocumentData> | QueryConstraint)[] en query . Intente agregar collection() directamente en la query y elimínelo de queryParams para que sea una matriz de tipo QueryContraint[] :
const queryParams = [ orderBy(sortType, sortMethod), limit(POSTS_PER_PAGE), ]; const filters = [ where("commentsCount", ">", "0"), // And possibly more where's ]; // Create a firestore query object using the parameters const _query = query(collection(db, "posts"), ...queryParams);