Typescript TSeD混合类型枚举和集合

Typescript TSeD混合类型枚举和集合,typescript,validation,enums,Typescript,Validation,Enums,我正在使用TSeD版本6.38.1 我有下面的型号 import {Any, CollectionOf, Enum, Property} from "@tsed/schema"; export enum Status { status1, status2, ... } export class FilterParams { ... Some other fields @Any(Enum(Status), CollectionOf(Enum(Sta

我正在使用TSeD版本
6.38.1
我有下面的型号

import {Any, CollectionOf, Enum, Property} from "@tsed/schema";
export enum Status {
   status1,
   status2,
   ...
}

export class FilterParams {
  ... Some other fields

  @Any(Enum(Status), CollectionOf(Enum(Status)))
  status: Status[] | Status
}
我正在努力注释
过滤器参数的
状态
字段
。我希望它是一个
状态
或一个
状态

我尝试了以下注释,但都不起作用

  • @Enum(Status)Status:Status[]| Status
    :此接受仅接受单个
    状态
    ,但拒绝
    状态的数组
  • @Enum(Status)Status:Status
    :它也只接受一个
    状态
    ,但拒绝
    状态的数组
  • @Enum(Status)Status:Status[]
    :此选项仅接受
    Status的列表,但拒绝
    Status的数组
  • @Any(Enum(Status),CollectionOf(Enum(Status)))Status:Status[]| Status
    :这会在运行时出现
    AJV\u验证错误,并显示消息
    FilterParams.Status.0应该是对象。

  • 如何在TSeD中实现此验证?

    您不能使用decorators(并且不可能使用示例中所示的混合decorator)

    解决方案是使用函数API正确描述模式,并使用OnDeserialize decorator确保始终具有状态数组

    import {Any, CollectionOf, Enum, Property, string, array} from "@tsed/schema";
    import {OnDeseriliaze} from "json-mapper";
    export enum Status {
       status1,
       status2,
       ...
    }
    const StatusSchema = string().enum(Status)
    
    export class FilterParams {
      ... Some other fields
    
      @AnyOf(StatusSchema, array().items(StatusSchema))
      @OnDeseriliaze(o => [].concat(o))
      status: Status[];
    }
    
    再见 罗曼