Quiero recibir algo de una API y validar si todos los campos son strings
, pero si no están presentes, quiero establecer valores predeterminados, estaba planeando usar yup
y validar el objeto en función de eso, así que el objeto que devuelvo de la función se escribe
import { v4 } from "uuid"; import { array, object, string } from "yup"; let mySchema = array( object({ id: string().default(() => v4()), title: string().default(""), description: string().default(""), courseVersions: array( object({ courseCodeId: string().default(""), courseName: string().default(""), }) ).default([]), }) ); export default function validateCourses(originalObject: any) { const cleanObject = mySchema.someFunction(originalObject); // Hope yup has a function console.log({ originalObject, cleanObject }); return cleanObject; }
Simplemente asigna validateSync
a una variable y ese valor se escribirá
const cleanObject = courseSchema.validateSync(originalObject); console.log({ cleanObject })
Será mejor que uses la interfaz y el protector de tipos.
interface CourseVersion { courseCodeId: string; courseName: string; } interface MySchema { id: string; title: string; description: string; courseVersions: CourseVersion[]; } let mySchema: MySchema = { id: 'mock-id', title: 'mock-title', description: 'mock-description', courseVersions: [ {courseCodeId: 'mock-courseCodeId', courseName: 'mock-courseName'} ] }) ); function isMySchema (schema: unknown): schema is MySchema { return schema instanceof MySchema; }
también puedes hacerlo así
function isMySchema (schema: unknown): schema is MySchema { return schema?.id !== undefined && typeof schema?.id === 'string' && schema?.title !== undefined && typeof schema?.title === 'string' etc...; }
Y úsalo así
export default function validateCourses(originalObject: unknown): MySchema { if (isMySchema(originalObject)) { return originalObject; // Will work because of the typeguard, it cast it into MySchema type } else { throw Error('wrong schema'); // Not sure what you do if it's not he right type } }
Editar: codifiqué esto en papel, tal vez haya un pequeño error de sintaxis.