Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

111
Vistas
¿Cómo manejar el tipo de cadena o matriz para un campo en Ajv?

Tengo un campo en mi JSON que se supone que contiene los valores permitidos para una entrada desplegable.

 [ { "field": "status", "type": "select", "defaultValue": "open", "allowedValues": ["open", "pending", "closed"] }, ... ]

Este campo debe contener una matriz de cadenas o un nombre de token (por ejemplo, $valorespermitidos$) del cual mi código debe extraer la lista de valores permitidos.

Mi problema es que me gustaría usar Ajv para validar el JSON, pero aparentemente el tipo de cadena y matriz no se pueden usar juntos.

 enum InputType { SIMPLE = "simple", SELECT = "select", AUTOCOMPLETE = "autocomplete", } interface DefaultDefinition { ... type: InputType; allowedValues: string | string[]; } const defaultDefinitionSchema: JSONSchemaType<DefaultDefinition> = { type: "object", properties: { ... type: { type: "string", enum: [InputType.AUTOCOMPLETE, InputType.SELECT, InputType.SIMPLE], }, allowedValues: { type: ["array", "string"], items: { type: "string" }, } }, required: ["allowedValues"], additionalProperties: false, };

Mensaje de error

Los tipos de propiedad 'tipo' son incompatibles. El tipo '("cadena" | "matriz")[]' no se puede asignar al tipo '"matriz"'.

Como solución alternativa, he considerado agregar otra propiedad llamada allowValuesToken de tipo cadena y hacer de allowValues una matriz de cadenas.

El problema con este enfoque es que se debe requerir una de esas propiedades, pero nunca ambas.

Me preguntaba si puedo especificar esto a través de si/entonces, pero ya tengo una condición si/entonces (no pude probarla todavía, debido a mi problema con el tipo de valores permitidos) y parece que como tengo que definir el lista absoluta de campos obligatorios en then/else (al contrario de agregar/eliminar dinámicamente campos individuales), esta tampoco es una forma realmente factible.

 if: { properties: { type: { enum: [InputType.SIMPLE], }, }, }, then: { required: ["type"] }, else: { required: ["type","allowedValues"] },

¿Alguien puede decirme cuál es la forma correcta de lograr mi requisito?

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda