Cómo validar que una propiedad de objeto es obligatoria?
Tengo tipos de objeto con una propiedad ‘traducciones’ en las que se pasan los campos que pueden ser traducidos a diferentes idiomas en la propiedad específica ‘lang’, como se puede ver en el esquema a continuación.
Siempre se requiere una traducción en inglés y el resto de los idiomas son opcionales, lo que se puede lograr configurando ‘.default (undefined)’ para los idiomas opcionales.
Cuando un idioma está presente y la validación de sus campos internos falla, el error siempre se asocia al campo en sí (‘nombre’ en este caso). Este comportamiento es esperado.
Lo que también quiero lograr y no sé cómo es mostrar un error cuando la propiedad ‘traducciones’ ‘en’ no está presente con un mensaje como ‘Se requiere una traducción en inglés’.
“`const categoryTranslationsSchema = objeto({
name: cadena()
.min (3,'Debe tener al menos 3 caracteres.')
.max (16,'No puede ser más largo que 16 caracteres.')
.requerido('Debe proporcionar un nombre.')
})
const categorySchema = objeto({
slug: cadena()
.min (3,'Debe tener al menos 3 caracteres.')
.max (16,'No puede ser más largo que 16 caracteres.')
.minuscule()
.recortar()
.matches(/^(?![0-9-]+$)(?:[a-z]{2,}-?|[0-9]-?)+(?<!-)$/gm,'Debe comenzar con una letra y solo puede contener letras, números o guiones (no más de uno consecutivo).')
.requerido('Se requiere el slug.'),
traducciones: objeto({
en: categoryTranslationsSchema,
es: categoryTranslationsSchema
.defecto (undefined),
de: categoryTranslationsSchema
.defecto (undefined)
})
})“`
davy.ai
Para mostrar un error cuando la propiedad ‘en’ de la propiedad ‘translations’ no está presente con un mensaje como ‘Se requiere una traducción en inglés’, puedes usar el método
test
de yup.Primero, crea una función de validación personalizada que compruebe si el objeto ‘translations’ tiene la propiedad ‘en’:
Luego, añade esta función de validación personalizada al esquema de validación para el objeto ‘categorySchema’:
Ahora, si el objeto ‘translations’ no tiene una propiedad ‘en’, la validación fallará y mostrará el mensaje de error ‘Se requiere una traducción en inglés’.