4

我有这种类型:

export type BranchOperatorRole = 'none' | 'seller' | 'operator' | 'administrator';

我可以使用哪个类验证器装饰器来验证属性是否具有这些值之一?

import { IsEmail, IsString, Contains } from "class-validator";

export type BranchOperatorRole = 'none' | 'seller' | 'operator' | 'administrator';

export class AddBranchOperatorRequest extends User {

    @IsEmail()
    email: string;

    @Contains(BranchOperatorRole )
    role: BranchOperatorRole;

}

4

2 回答 2

5

您无法按类型验证,因为类型在运行时消失。您可以创建 Enum 并使用IsEnum装饰器进行验证。例子

在你的情况下尝试这样的事情:

export enum BranchOperatorRoleEnum = {
  none=1,
  seller=2,
  // other
}

class AddBranchOperatorRequest {
    @IsEnum(BranchOperatorRoleEnum)
    role: BranchOperatorRole;
}

甚至使用数组而不是枚举

export type BranchOperatorRole = 'none' | 'seller' | 'operator' | 'administrator';

export const BranchOperatorRoles: BranchOperatorRole[] = [
  'none',
  'seller',
  // other
]

class AddBranchOperatorRequest {
    @IsEnum(BranchOperatorRoles)
    role: BranchOperatorRole;
}
于 2020-05-25T14:35:16.327 回答
1
const roles = ['none', 'seller', 'operator', 'administrator'] as const;
export type BranchOperatorRole = typeof roles[number];

export class AddBranchOperatorRequest extends User {

    @IsEmail()
    email: string;

    @IsIn(roles)
    role: BranchOperatorRole;

}
于 2021-08-16T09:39:05.770 回答