Typescript TSeD混合类型枚举和集合
我正在使用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
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[];
}
再见
罗曼