Estaba tratando de poder pasar la propiedad como una matriz de cadenas o simplemente como un valor de cadena.
class GetUsersDTO { // @IsArray() | @IsString() readonly status; } Pero no es posible a pesar de que es un caso de uso común. ¿Podemos hacerlo con un paquete class-validator simple?
Deberá crear su propio validador personalizado para esto. Typescript no refleja los genéricos (sí, un tipo de unión es un genérico especial) y, por eso, el validador de clase no podrá determinar correctamente cuál de los dos decoradores usar.
import { ValidatorConstraint, ValidatorConstraintInterface, ValidationArguments } from 'class-validator'; @ValidatorConstraint({ name: 'customText', async: false }) export class IsArrayOrString implements ValidatorConstraintInterface { validate(val: string | string[], args: ValidationArguments) { const isArray = Array.isArray(val); const isString = typeof val === 'string'; return isArray || isString } }Y ahora puedes usarlo como
class GetUsersDTO { @Validate(IsArrayOrString) readonly status: string | string[]; }Mi palabra personal de advertencia: el uso de múltiples entradas permitidas en el mismo punto final generalmente solo trae problemas y dolores de cabeza. Si es posible, manténgalos separados.