He estado usando la biblioteca del decorador del validador de clases para validar objetos dto y me gustaría crear una lista blanca de dominios para el decorador @IsEmail. La biblioteca incluye un decorador @Contains, que se puede usar para una sola cadena (semilla), pero me gustaría ingresar una matriz de cadenas válidas en su lugar. es posible?
Actual
@Contains('@mydomain.com') @IsEmail() public email: string;deseado
@Contains(['@mydomain, @yourdomain, @wealldomain, @fordomain']) @IsEmail() public email: string;Si esto no es posible, agradecería cualquier dirección sobre cómo implementar un decorador personalizado que sirva para este propósito.
Gracias.
Considere este ejemplo:
const Contains = <Domain extends `@${string}`, Domains extends Domain[]>(domains: [...Domains]) => (target: Object, propertyKey: string) => { let value: string; const getter = () => value const setter = function (newVal: Domain) { if (domains.includes(newVal)) { value = newVal; } else { throw Error(`Domain should be one of ${domains.join()}`) } }; Object.defineProperty(target, propertyKey, { get: getter, set: setter }); } class Greeter { @Contains(['@mydomain', '@wealldomain']) greeting: string; constructor(message: string) { this.greeting = message; } } const ok = new Greeter('@mydomain'); // ok const error = new Greeter('234'); // runtime errorSi proporciona un dominio de correo electrónico no válido, se activará un error de tiempo de ejecución. Depende de usted cómo desea implementar la lógica de validación. Puede que no sea necesario un error de tiempo de ejecución