Validar los datos recibidos de una API con zod

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Este módulo nos va a permitir verificar si los datos obtenidos de una API son correctos en el momento de su recepción. Si no validamos los datos recibidos de una API en el momento de su recepción es ponsible que obtengamos un error en el código más adelante, al intentar acceder a una propiedad etc. Para evitar estas situaciones, lo más rápido es validar la recepción de los datos para que si alguno no viene correctamente tener un error en ese preciso momento.

Validación cuando los datos de entrada y los que vamos a utilizar en nuestra aplicación coinciden

type Task = {
  id: string;
  order: number;
  isDone?: boolean;
  text: string;
}

// Podemos generar cómodamente el siguiente schema en este enlace:
// https://transform.tools/typescript-to-zod

const taskSchema = z.object({
  id: z.string(),
  order: z.number(),
  isDone: z.boolean().optional(),
  text: z.string()
})

export const getTasks = async (userId: string): Promise<Task[]> => {
  const inputTasks = ...
  const tasks = inputTasks.map(taskSchema.parse);
  return tasks
}

Validación y conversión de los datos que llegan en los datos con los que vamos a trabajar

Nuestro taskSchema quedaría así:

const taskSchema = z.object({
  id: z.number(),
  user_id: z.number(),
  date_type: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]),
  each_days: z.number().nullable(),
  execution_date: z.string(),
  txt: z.string(),
  bought: z.union([z.literal(0), z.literal(1)]),
}).transform(data => ({
  id: data.id,
  user_id: data.user_id,
  date_type: data.date_type,
  each_days: data.each_days,
  execution_date: new Date(data.execution_date),
  txt: data.txt,
  bought: data.bought === 1
}));

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.