es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear un tipo para el tipo de archivo `Record` en zod.

Uso el type="file" de entrada y en lugar de guardar los datos en FileData uso simplemente un objeto llano y creé un tipo para ello: Record. Funciona bien, pero cuando intento crear un validador con zod, no entiendo cómo crear el mismo tipo para él.

El uso:

import { object as zodObject, string, number } from 'zod';
import { useValidators } from '../some';

const useValidation = () => {
  const { createResolver } = useValidators();

  return {
    resolver: createResolver(
      zodObject({
        name: string(),
        price: number(),
        files: ???,
      })
    ),
  };
}; 

El documento es bastante exhaustivo, pero no pude encontrar ningún ejemplo para mi caso: https://github.com/colinhacks/zod

El uso de la entrada:

“`
const App = () => {
const [files, setFiles] = useState<><string, file="">>({});

return (
<input type="file" onchange="{event" ==""> {
const files = event.target.files;
const newFiles: Record<string, file=""> = {};
const keys = Object.keys(files);

<pre><code> for(let i = 0; i < keys.length; i++) {
const file = newFiles[key];
newFiles[file.name] = file;
}

setFiles(newFiles);
}}
/>
</code></pre>

);
}
“`</string,></string,>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear un validador con zod para el objeto files de tipo Record<string, file="">, puedes utilizar el método auxiliar record proporcionado por zod. Aquí tienes un ejemplo de cómo podrías modificar la función useValidation para incluir el validador files:

    import { object as zodObject, string, number, record } from 'zod';
    import { useValidators } from '../some';
    
    const useValidation = () => {
      const { createResolver } = useValidators();
    
      return {
        resolver: createResolver(
          zodObject({
            name: string(),
            price: number(),
            files: record(string(), zod.file()),  
          })
        ),
      };
    };
    

    El método record recibe dos argumentos, el primero es el tipo de las claves (en este caso, string), y el segundo es el tipo de los valores (en este caso, zod.file()). zod.file() es una forma abreviada de zod.union([zod.string(), zod.blob(), zod.buffer()]), lo que significa que puede validar cualquier valor que sea una string, un Blob o un Buffer.

    Con este validador, files solo se considerará válido si es un objeto donde cada clave sea una cadena y cada valor sea un objeto File. Si hay cualquier otro valor presente, la validación fallará.</string,>

Comments are closed.