npm 包 typesafe-joi 使用教程

前言

在进行前端开发过程中,数据校验是一项必不可少的工作。在 JavaScript 语言中,Joi 已经成为了一个非常不错的数据校验库,可以帮助我们快速的完成常用的数据验证操作。

但是,由于 JavaScript 的动态特性,Joi 在一些特殊情况下可能会出现类型不一致错误的问题,导致验校失败。为了解决这个问题,众多开发者陆续开发了支持类型安全的 Joi 包,其中 typesafe-joi 是一个非常不错的选择。

本篇文章将为大家分享 typesafe-joi 的使用教程,详细介绍这个包的优势以及注意点,带大家一起来体验它的强大功能。

基本用法

typesafe-joi 提供了和 Joi 几乎一样的 API 接口,同时又加入了类型安全的特性。在使用 typesafe-joi 的时候,我们可以先定义一个 schema,然后对这个 schema 进行校验。

下面是一个简单的样例,演示了如何使用 typesafe-joi 进行字符串类型校验:

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

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

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

在这个例子中,我们首先引入了 Joi、string 这两个库中的 API。然后创建了一个 nameSchema,其中指定了 name 字段必须为字符串类型并且不能为空。

接下来,我们对 { name: 'zhangsan' } 和 { name: 1 } 进行了数据校验,并使用 Joi 的 assert 函数进行输出。对于名字为字符串类型的数据,该函数直接输出 undefined;而对于名字类型错误的数据,该函数将抛出“必须为字符串”的异常。

类型安全

上面我们提到了 typesafe-joi 的一个重要特性:它支持类型安全。那么这个特性在实际使用中具体表现为什么呢?

其实,在使用 typesafe-joi 进行数据校验时,我们可以使用 TypeScript 对校验规则进行定义,这样一来就可以在编译期间就发现校验规则出现的类型安全问题了。

假设一个场景,我们使用 Joi 对一个名字为“name”的字段进行数据校验,但在程序中我们却将其写成了“names”,由于 Joi 是一个动态类型的库,它在运行时是不会对该问题做出任何提示的。

而如果使用 typesafe-joi 进行校验,我们就可以在编译阶段就发现该问题,从而提高了代码的健壮性和安全性。下面我们来看一个例子。

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

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

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

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

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

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

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

在这个例子中,我们首先定义了一个类型为 Person 的接口,其中包含姓名和年龄两个字段。然后创建了两个数据校验规则:

  • schemaWrong:规定姓名必须为“names”,年龄必须为字符串类型。
  • schemaRight:规定姓名必须为“name”,年龄必须为字符串类型。

接下来我们定义了一个 person 变量,其属性名称分别为“names”和“age”,并且将它赋值给了 Person 接口。显然这个数据结构是不符合规范的,而使用 typesafe-joi 进行校验并传入 schemaWrong 进行编译时,TypeScript 会报出“Person 中不存在 names 属性”的错误;而使用 schemaRight 进行编译后,则不会报错,运行起来也不会出现校验错误。

强制验证

Joi 是一个非常灵活的库,我们可以不对数据进行严格的验证,允许一些不满足校验规则的数据存在。而对于 typesafe-joi,我们则允许开发者对校验规则进行强制验证。

对于强制验证的规则,只要设置 strict: true 即可。该规则将在校验失败时抛出一个错误,而不是将错误存储在 ValidationError 对象中。举个例子:

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

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

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

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

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

在这个例子中,在 strictSchema 中,我们将 strict 属性设置为 true,这意味着在对 {name: 'Lucas', age: 25} 进行校验时,必须确保该数据中仅仅包含了 name 字段,否则将抛出一个错误。

相反,在 nonStrictSchema 中,我们将 strict 属性设置为 false,这意味着可以向该 schema 中添加任意的数据元素,而不必进行过多的验证。当 {name: 'Lucas', age: 25} 传入数据块时,它能够通过验证并输出 undefined。

总结

本文为大家介绍了 typesafe-joi 的使用方法,该包能够在 Joi 的基础上,增加了对于类型安全的支持,并允许开发人员在编译阶段就发现可能存在的数据校验问题。

我们通过样例代码,详细的讲解了 typesafe-joi 如何进行数据校验、如何支持强制校验规则以及如何利用 TypeScript 检查校验规则的类型安全。希望这篇文章对大家在前端开发中能够充分利用 typesafe-joi 提高开发效率提供帮助。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/typesafe-joi


猜你喜欢

  • 前端技术:npm 包 benchmarkify 使用教程

    在现代的前端开发中,性能优化是一个必不可少的环节。在优化过程中,常常需要知道两种不同的实现方式哪个更快。为此,需要使用一些可以进行性能测试的工具,benchmarkify 是一个很好用的 npm 包,...

    4 年前
  • npm 包 @hapi/teamwork 使用教程

    前言 在前端开发中,使用 npm 包已成为不可或缺的一部分,因为它们可以帮助我们轻松地实现各种功能,减少代码的冗余和复杂度。 今天我们要介绍的是一个非常实用的 npm 包,它叫做 @hapi/team...

    4 年前
  • 介绍npm包 @hapi/subtext以及使用教程

    简介 在前端开发中,我们时常需要处理用户上传的文件,尤其是大文件,传统的读取和解析文件的方式难以处理大文件,因此我们需要使用一些优秀的框架和工具来减轻这种痛点。@hapi/subtext就是这样一个解...

    4 年前
  • npm 包 @hapi/statehood 使用教程

    随着前端开发的不断发展,使用npm包已成为web开发的常见方式。其中,@hapi/statehood是一个用于维护状态和cookie的npm包,具有一定的深度和学习指导意义。

    4 年前
  • npm 包 @hapi/somever 使用教程

    什么是 @hapi/somever @hapi/somever 是一个 Node.js 库,用于请求验证和版本号比较。它的作用是验证请求头部的版本号是否符合要求,检查该版本号是否处于支持的范围内,以此...

    4 年前
  • npm 包 @hapi/shot 使用教程

    前言 在前端开发中,我们常常需要模拟 HTTP 请求来测试我们的应用程序。在这样的情况下,我们可以使用 Node.js 中的 http, https 或者 http2 模块来创建一个 HTTP 服务。

    4 年前
  • npm 包 @hapi/mimos 使用教程

    前言 Web 应用程序的流行度和复杂性日益增长,最终导致了大量资源请求。这些资源请求包括 HTML、CSS、JavaScript、图像和其他静态文件,这些文件会稳定地占据应用程序更多的处理时间。

    4 年前
  • npm 包 @alferpal/eslint-config-calcifer 使用教程

    随着前端业务的复杂性和代码量的增加,代码风格的一致性和质量已经成为非常重要的问题。ESLint 正是为我们提供了一种能检查 JavaScript 代码错误和风格的工具。

    4 年前
  • npm 包 rest-facade 使用教程

    介绍 在前端开发中,访问后端 API 是一项至关重要的任务。rest-facade 是一个 npm 包,它提供了一个简单且易于使用的方法来访问 RESTful API。

    4 年前
  • npm 包 xml-encryption 使用教程

    前言 在前端开发过程中,常常需要进行 XML 数据的加密与解密。xml-encryption 是一个可以实现 XML 数据加密的 npm 包,它可以将 XML 数据进行加密以便传输或者存储,同时也可以...

    4 年前
  • npm 包 @hapi/rule-scope-start 使用教程

    在前端开发中,我们经常需要对 JavaScript 代码进行规范化和优化,以便让代码更加易读易维护。其中,规范化就是指遵循一定的编程规范来书写代码,而优化则是指针对代码中的问题进行改进,使其运行更加高...

    4 年前
  • npm 包 @hapi/rule-no-var 使用教程

    在 JavaScript 编程中,变量声明经常使用 var 关键字。然而,由于 var 存在变量提升的问题,会造成程序的一些意外行为。 为了帮助开发者编写更加规范的代码,Hapi 团队开发了一个 np...

    4 年前
  • npm 包 @hapi/rule-no-arrowception 使用教程

    在 JavaScript 代码中经常会使用箭头函数,使代码更简洁优雅。但是,如果在箭头函数中再使用箭头函数,可能会导致代码可读性下降,维护难度增加,这就是所谓的“Arrowception”问题。

    4 年前
  • npm 包 @hapi/rule-for-loop 使用教程

    在前端开发中,经常会遇到需要循环处理数据的情况。此时,我们可以使用一些工具来帮助我们更方便地处理数据。其中,@hapi/rule-for-loop 就是一款非常优秀的 npm 包,可以帮助我们实现更加...

    4 年前
  • npm 包 @hapi/rule-capitalize-modules 使用教程

    在前端开发中,我们经常需要使用各种工具优化代码和提高开发效率。其中,npm 包是常见的工具之一。@hapi/rule-capitalize-modules 是一个有用的 npm 包,它可以帮助我们规范...

    4 年前
  • 使用npm包seneca-balance-client

    在Web开发中,构建复杂的应用程序需要管理许多服务和资源。随着应用程序的增长,它们的复杂性也越来越高。因此,在本文中我们将介绍如何使用npm包seneca-balance-client来简化相关的工作...

    4 年前
  • npm 包 @seneca/repl 使用教程

    介绍 @seneca/repl 是一个 Node.js 的 REPL(交互式解释器)库,它能够将任何对象暴露给 REPL 环境,并在 REPL 环境中进行调试。 该库适用于前端开发,大大提高了调试效率...

    4 年前
  • npm 包 sneeze 使用教程

    npm 是一个包管理工具,可让开发人员轻松查找、安装和使用各种软件包或模块。sneeze 是一个优秀的开源 npm 包,提供了灵活和强大的调试、监控和错误检测功能。

    4 年前
  • npm 包 rif 使用教程

    在前端开发中,经常需要进行 React 组件的渲染,这就需要用到 React 的渲染工具。rif 是一个基于 React 的组件渲染工具,可以用来创建和测试 React 组件。

    4 年前
  • NPM 包 optioner 使用教程

    简介 NPM 包 optioner 是一个非常实用的工具,可以帮助开发者在 Node.js 中方便地定义和解析命令行参数。它非常小且易于使用,并允许您创建安全的、可重用的命令行接口。

    4 年前

相关推荐

    暂无文章