TypeScript 中使用 AJV 数据验证库的最佳实践

阅读时长 12 分钟读完

AJV 是一个 JSON Schema 验证库,用于验证请求和响应消息的 JSON。TypeScript 作为 JavaScript 的超集,可以为 AJV 提供更好的类型检查和类型补全。本文将介绍如何在 TypeScript 中使用 AJV 最佳实践,并包含示例代码和指导意义。

安装

使用 npm 包管理器进行安装:

其中,ajv 是 AJV 库的主要依赖,而 @types/ajv 是 TypeScript 的类型定义,提供了更好的类型检查和类型补全。

基础用法

首先,我们需要对 JSON Schema 进行解析,并编写自定义数据验证逻辑。下面是一个示例的 JSON Schema:

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

需要注意的是,在编写自定义数据验证逻辑时,需要使用 ajv.compile 函数将 JSON Schema 编译成一个函数,并传递给 validate 函数进行验证。

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

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

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

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

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

TypeScript 最佳实践

自定义类型

在 TypeScript 中,可以使用 interface 定义自定义类型,并在 JSON Schema 中引用该类型。这样可以在验证时获得更好的类型检查和类型补全。

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

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

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

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

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

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

自定义错误消息

AJV 提供了自定义错误消息的功能,可以根据实际需求定义错误消息。需要注意的是,错误消息必须包含 ${keyword} 占位符,它会被动态替换为验证时使用的关键字。

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

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

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

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

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

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

整合 Express

在开发 Web 应用程序时,常常需要在 Express 中使用 JSON Schema 验证请求和响应消息的 JSON。下面是一个示例的 Express 中间件,用于验证请求消息的 JSON。

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

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

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

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

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

可以使用 express.json() 中间件来解析请求消息的 JSON,并使用 validatePersonMiddleware 中间件验证请求消息的 JSON。

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

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

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

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

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

总结

在 TypeScript 中使用 AJV 数据验证库是一种非常方便和有效的方法,可以为我们带来更好的类型检查和类型补全,并使我们的开发过程更加高效。本文介绍了 TypeScript 中使用 AJV 的最佳实践,并包含详细的示例代码和指导意义。希望本文能够对 TypeScript 开发者有所帮助。

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

纠错
反馈