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

173
Vistas
Validador más rápido. Crear esquema con dependencia de valor

Tengo dos tipos de usuarios: teacher y student .
El esquema del maestro es:

 { username : string; firstName : string; lastName : string; type : 1; // 1 = teacher schoolId : objectId; email : string; }

El esquema del estudiante es:

 { username : string; firstName : string; lastName : string; type : 2; // 2 = student classCode : number; }

Para la validación, uso fastest-validator . Quiero construir un esquema para ello. Pero si ve, tenemos algunos campos diferentes en diferentes tipos de usuarios (el maestro tiene email y schoolId ; el estudiante tiene classCode ).
Mi deseo es construir un esquema como el siguiente pseudocódigo:

 { username : string, lastName : string, firstName: string, or: [ { type : 1, ... }, { type : 2, ... } ] }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Utilice Json-Schema ya que sigue los estándares, es rápido y no tiene dependencias.

Puede ver a continuación ObjectTypeDef que ayuda a producir un esquema correcto.

Las funciones isTeacher , isStudent e isTeacherOrStudent escribirán su objeto como parámetro si la función devuelve true .

La propiedad anyOf es la mejor respuesta para usted: un esquema debe ser todo correcto, de lo contrario es falso. Las condiciones deben envolver todos los esquemas permitidos.

 import type { JSONSchema7, JSONSchema7Definition } from 'json-schema'; import { validate } from 'json-schema'; type AnyObject<K extends string | number | symbol = string | number | symbol, T = any> = Record<K, T>; type ObjectTypeDef<T extends AnyObject> = JSONSchema7 & { properties: Record<keyof T, JSONSchema7Definition>; required: (keyof T)[]; }; type Teacher = { username: string; firstName: string; lastName: string; type: 1; schoolId: string; email: string; }; type Student = { username: string; firstName: string; lastName: string; type: 2; classCode: number; }; const schemaTeacher: ObjectTypeDef<Teacher> = { properties: { username: { type: 'string' }, firstName: { type: 'string' }, lastName: { type: 'string' }, type: { const: 1 }, schoolId: { type: 'string' }, email: { type: 'string' }, }, required: ['username', 'firstName', 'lastName', 'type', 'schoolId', 'email'], additionalProperties: false, }; const schemaStudent: ObjectTypeDef<Student> = { properties: { username: { type: 'string' }, firstName: { type: 'string' }, lastName: { type: 'string' }, type: { const: 2 }, classCode: { type: 'number' }, }, required: ['username', 'firstName', 'lastName', 'type', 'classCode'], additionalProperties: false, }; export const isTeacher = (obj: AnyObject): obj is Teacher => validate(obj, schemaTeacher).valid; export const isStudent = (obj: AnyObject): obj is Student => validate(obj, schemaStudent).valid; const schemaTeacherOrStudent: JSONSchema7 = { anyOf: [schemaStudent, schemaTeacher], }; export const isTeacherOrStudent = (obj: AnyObject): obj is Teacher | Student => validate(obj, schemaTeacherOrStudent).valid;
about 4 years ago · Juan Pablo Isaza Denunciar
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