首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用class-validator验证字符串文字类型

使用class-validator验证字符串文字类型
EN

Stack Overflow用户
提问于 2020-05-24 06:31:34
回答 2查看 3.4K关注 0票数 4

我有这样的类型:

代码语言:javascript
复制
export type BranchOperatorRole = 'none' | 'seller' | 'operator' | 'administrator';

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

代码语言:javascript
复制
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;

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-25 22:35:16

你不能按类型验证,因为类型在运行时消失了。您可以创建枚举并使用IsEnum装饰器进行验证。Example

在您的示例中,尝试如下所示:

代码语言:javascript
复制
export enum BranchOperatorRoleEnum = {
  none=1,
  seller=2,
  // other
}

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

甚至使用数组而不是枚举

代码语言:javascript
复制
export type BranchOperatorRole = 'none' | 'seller' | 'operator' | 'administrator';

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

class AddBranchOperatorRequest {
    @IsEnum(BranchOperatorRoles)
    role: BranchOperatorRole;
}
票数 3
EN

Stack Overflow用户

发布于 2021-08-16 09:39:06

代码语言:javascript
复制
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;

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61979394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档