npm 包 typescript-class-validator 使用教程

阅读时长 5 分钟读完

概述

在 TypeScript 中使用类时,为了保证数据的正确性、安全性,我们常常需要进行属性验证。这时候 npm 包 typescript-class-validator 就提供了便利。该包是一个基于装饰器的 TypeScript 类属性验证器,允许使用简洁的装饰器语法声明类及其属性的验证规则,并在属性赋值时自动进行验证。

在本文中,我们将学习如何使用 typescript-class-validator 包来实现 TypeScript 类属性的验证。

安装

使用以下命令进行安装:

npm install class-validator reflect-metadata --save

其中 reflect-metadata 是必须的,这是因为 typescript-class-validator 包内部使用了 TypeScript 的装饰器特性,需要借助 reflect-metadata 来支持。

验证装饰器

使用 typescript-class-validator 包,我们需要在类属性上使用装饰器来声明验证规则。这些装饰器统称为“验证装饰器”,可在包的 Validator 模块中找到。

以下是一些常用的验证装饰器:

装饰器 用途
IsNotEmpty 校验字符串、数组、类数组非空
IsBoolean 校验布尔值类型
IsNumber 校验数值类型
IsInt 校验整数类型
IsString 校验字符串类型
IsEmail 校验电子邮件格式
IsUrl 校验 URL 格式
IsEnum 校验枚举值是否合法
MinLength 校验字符串、数组、类数组最小长度
MaxLength 校验字符串、数组、类数组最大长度
Min 校验数值最小值
Max 校验数值最大值
MinDate 校验日期最早时间
MaxDate 校验日期最晚时间

具体使用方法,请见下一节例子。

使用

以下是一个使用 typescript-class-validator 的示例:

-- -------------------- ---- -------
------ ------------ ------ ---- ---- ------------------

----- ----- -
    -------------
    ---------- -------

    --------
    -------
    --------- -------

    ---------------------- ------- --------- ------- -
        -------------- - ----------
        ------------- - ---------
    -

    ----------- ------ -
        -- ------
    -
-

----- ----- - --- --------- ---
----- ------ - ----- ----------------
--------------------

我们创建了一个名为 Order 的类,它有两个必须的属性,分别是 productId 和 quantity。我们使用 IsNotEmpty 和 IsInt 装饰器来分别验证这两个属性。

在实例化 Order 类之后,我们使用 validate 函数进行验证。validate 函数是 typescript-class-validator 包的内置验证函数,它返回一个 Promise 对象并尝试验证传入的类实例。如果类实例验证通过,Promise 的状态会被设置为 resolved,否则会被设置为 rejected。在 Promise 的 resolved 或 rejected 事件中,我们可以处理成功或失败时需要进行的操作。

在本例中,我们将验证的错误记录在一个 errors 数组中,并输出到控制台。

其它验证方法

除了使用装饰器声明验证规则之外,typescript-class-validator 还提供了其它的验证方法。以下是一些常见的验证方法:

方法名 作用
validateSync(obj) 同步验证一个类实例
validate(obj) 异步验证一个类实例
validateOrReject(obj) 如果验证不通过,则异步抛出一个 ValidationError 异常
validateOrRejectSync(obj) 同步验证一个类实例,否则抛出 ValidationError 异常

结论

typescript-class-validator 这个 npm 包为 TypeScript 类属性验证提供了非常方便、简洁、强大的方式。利用它可以轻松声明并检验属性值的完整性。同时,与它的其它优点相比,写代码的难度不算大并且可读性良好。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60067359890c4f7277583e4c

纠错
反馈