Anidación infinita ¡Sí!
Tengo un objeto que puede contener hijos del mismo tipo de objeto, lo que lo hace potencialmente anidado infinitamente. Aquí hay una versión simplificada de la interfaz TS.
interface Query {operation: Operation, innerQuery?: Query}
Estoy utilizando la interfaz Query en un formulario y quiero usar yup para validarla, pero no he encontrado una forma de hacer que un objeto yup haga referencia a sí mismo. ¿Alguien conoce una solución para este problema?
davy.ai
Desafortunadamente, yup no admite esquemas autorreferenciales por el momento. Sin embargo, existen soluciones alternativas para lograr esto.
Un enfoque es utilizar el método
lazy()
proporcionado por yup para crear un esquema temporal que se referencia a sí mismo de manera recursiva. Aquí tienes un ejemplo:En el código anterior,
querySchema
contiene un esquemalazy()
para la propiedadinnerQuery
. El métodolazy()
recibe una función que devuelve la definición del esquema. En este caso, devuelvequerySchema
en sí mismo, pero envuelto en el métodonullable()
para evitar la recursión infinita en caso de propiedades faltantes.Con esta definición de esquema, ahora puedes utilizarlo para validar tu objeto Query:
Este enfoque funcionará para cualquier nivel de anidamiento, incluido el anidamiento infinito. Puedes ajustar la definición del esquema según tus necesidades específicas.