Búsqueda de sitios web

typescript - Validar clase: Fallar la validación si el campo está presente


Tengo una clase de ejemplo (https://github.com/typestack/class-validator#validation-messages). Creé una función que debería ejecutar una validación normal o, si se especifica, ejecutar una validación que falle si el campo title está incluido en la instancia que se está validando.

import {MinLength, MaxLength, validate} from "class-validator";

export class Post {

    @IsString()
    body: strong;

    @IsString()
    title: string;

    public async validatePost(isTitle){
        // if we want the title to be included in the instance, do normal validation
        if(isTitle) {
            validate(this, { forbidUnknownValues: true, validationError: { target: false } });
        }
        // if a title is provided, fail validation
        else {
            // TODO: How can I fail validation if `title` is part of the instance?
        }
    }

}

Sé que se puede generar un error cuando hay propiedades que no están en la lista blanca (https://github.com/typestack/class-validator#whitelisting), pero no logro entender cómo fallar condicionalmente la validación si un campo está presente. ¿Es esto siquiera posible sin quizás crear un decorador personalizado?

Respuesta #1

Hay varias opciones:

puedes añadir una condición: https://github.com/typestack/class-validator#conditional-validation

@ValidateIf(o => o.otherProperty === "value")
@Equals(undefined)
title: string;

si quieres que siempre esté indefinido:

@Equals(undefined)
title: string;

Si usas class-transformer, puedes marcarlo como @Excluded para que, cualquiera que sea el valor enviado, no se establezca en el campo.

@Exclude({ toPClassOnly: true })
title: string;

Artículos relacionados