npm 包 toxic-decorators 使用教程

阅读时长 7 分钟读完

简介

toxic-decorators 是一个基于装饰器语法实现的 JavaScript 类型校验库,主要用于解决前端开发中常见的类型错误问题。

这个库提供了很多有用的装饰器,可以用于校验函数参数、类属性等等。它的使用非常灵活,可以根据业务需求自定义校验规则。此外,它还提供了一些内置校验器,例如 notNullnotEmptyisInt 等等,可以用于快速校验常见数据类型。

本篇文章将介绍使用 toix-decorators 的方法,并且会提供一些使用示例和最佳实践。

安装

使用 npm 可以很方便地安装 toxic-decorators:

使用

基础用法

使用 toxic-decorators 可以通过以下几个步骤实现:

  1. 在需要校验类型的变量或者属性上添加校验装饰器。
  2. 在需要校验的时候调用装饰器函数。

下面是一个使用 isString 校验器的示例:

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

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

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

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

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

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

在这个示例中:

  1. @isString() 装饰器将 name 属性标注为字符串类型。
  2. 构造函数使用传入的参数 name 构造了一个新对象 obj
  3. isString(obj, 'name') 调用校验器,断言 obj.name 的类型是否是字符串类型。

自定义校验器

toxic-decorators 支持自定义校验器,可以根据业务需求实现自己的校验规则。

自定义校验器需要满足以下两个条件:

  1. 如果校验失败,需要抛出一个错误。
  2. 校验器函数必须接收两个参数,分别是需要校验的对象和属性名。

下面是一个使用自定义校验器的示例:

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

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

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

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

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

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

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

在这个示例中:

  1. 我们使用 createValidator 函数创建了一个自定义的校验器。这个校验器接受需要验证的对象和属性名,然后检查属性是不是一个合法的邮箱地址(使用正则表达式)。
  2. @validateEmail() 装饰器将 email 属性标注为需要使用 validateEmail 校验器校验。
  3. 构造函数使用传入的参数 email 构造了一个新对象 obj
  4. validateEmail(obj, 'email') 调用校验器,断言 obj.email 是否是一个合法的邮箱地址。

可选校验器

toxic-decorators 支持可选校验器,即一些校验器可以被标记为可选。这些被标记为可选的校验器,如果校验对象或属性不存在,将不会抛出错误。

下面是一个使用可选校验器的示例:

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

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

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

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

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

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

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

在这个示例中:

  1. @optional() 装饰器标记了 email 属性是可选的。
  2. 构造函数使用传入的参数 nameemail 构造了一个新对象 obj
  3. isString(obj, 'name')isString(obj, 'email') 调用校验器,断言 obj.nameobj.email 的类型是否是字符串类型。

最佳实践

在使用 toxic-decorators 进行类型校验时,有一些最佳实践可以使你的代码更加简洁和易于维护:

  1. 确定使用的校验器对您的代码库中的所有数据类型都适用。
  2. 将校验器应用于类属性时,始终将其定义在类的顶部。
  3. 使用规范和自我约束性,确定使用约定俗成和易于理解的校验器名称。
  4. 使用可选校验器时,应将其放置在需要校验输入值的函数参数上。

下面是使用最佳实践的示例:

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

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

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

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

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

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

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

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

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

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

在这个示例中:

  1. 我们使用 isStringisInt 校验器来校验 nameage 属性的类型。
  2. 使用 optional 标记 email 属性是可选的。
  3. greet 方法上,我们使用 @optional 修饰了 msg 参数。
  4. 构造函数使用传入的参数 nameageemail 构造了一个新对象 obj
  5. isString(obj, 'name')isInt(obj, 'age')isString(obj, 'email') 调用校验器,断言 obj.nameobj.ageobj.email 的类型是否正确。
  6. obj.greet()obj.greet('Hello') 调用了 greet 方法,并根据需要传入了 msg 参数。如果 msgundefined 或字符串类型,greet 方法将输出正确的字符串。

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

纠错
反馈