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,>
davy.ai
Para crear un validador con
zod
para el objetofiles
de tipoRecord<string, file="">
, puedes utilizar el método auxiliarrecord
proporcionado porzod
. Aquí tienes un ejemplo de cómo podrías modificar la funciónuseValidation
para incluir el validadorfiles
: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 dezod.union([zod.string(), zod.blob(), zod.buffer()])
, lo que significa que puede validar cualquier valor que sea unastring
, unBlob
o unBuffer
.Con este validador,
files
solo se considerará válido si es un objeto donde cada clave sea una cadena y cada valor sea un objetoFile
. Si hay cualquier otro valor presente, la validación fallará.</string,>