Estoy usando yup para validar y escribir datos provenientes de la API. Tengo los siguientes validadores y tipo:
export const someSchema = object({ id: number().required(), name: string().required(), someArray: array().of(string()), date: dateSchema, }).from('date', 'startDate') export const someListSchema = array().of(someSchema) export type SomeType = InferType<typeof someSchema>;Y funciona de maravilla, las matrices se validan perfectamente y los tipos se asumen como se esperaba.
El único problema es cómo valido una matriz, haciéndolo de la siguiente manera:
await someListSchema.validate(data)Y si algún elemento de una matriz no cumple con los requisitos del validador, arroja un error y todo el proceso de validación falla. Me gustaría deshacerme de los elementos de matriz no válidos y devolver el resto de la matriz. ¿Cómo proceder con la validación filtrando elementos no válidos y manteniéndolos válidos?
Estaba intentando con la opción { abortEarly: false } , también probé el enfoque iterando a través de la matriz para hacer validaciones por elemento, pero sin éxito. ¿Alguna idea sobre cómo lograr el resultado esperado?
Saludos, Bartosz.
Puede recorrer la matriz y validar los objetos individualmente. De esa manera, puede definir su propia lógica sobre lo que quiere que suceda cuando el objeto no pasa la validación.
Por ejemplo,
export const someSchema = object({ id: number().required(), name: string().required(), someArray: array().of(string()), date: dateSchema, }).from('date', 'startDate'); const results = await Promise.allSettled(data.map((object) => someSchema.validate(object))); const filteredResults = results.filter(({status}) => status === "fulfilled").map(({value}) => value);