NPM 包 typeself 使用教程

什么是 typeself

typeself 是一个专注于 JavaScript 类型体系的开源工具库,通过使用 typeself,您可以有效地降低由于 JavaScript 动态类型系统而导致的错误率,增加代码的可读性和可维护性。

如何使用 typeself

安装

您可以通过 npm 安装 typeself:

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

简单使用示例

接下来我们来看一个简单的使用示例:

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

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

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

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

在上述代码中,我们定义了一个名为 User 的类型,要求其拥有 name(字符串类型)、age(数字类型)和 email(字符串类型)三个字段,然后通过 validate 方法对一个拥有相同字段的对象进行校验,如果通过校验,validate 方法会返回 true

typeself 还提供了其他一些实用的校验方式以及一些高级功能,接下来我们将更详细地讲解这些内容。

类型定义

跟上面的例子一样,typeself 的类型定义方式是通过定义一个类来实现的,这个类需要继承自 Type

在类型定义时,我们需要定义一个类变量 shape,并将其设置为一个对象,这个对象的键是字段的名称,值则是该字段所能包含的类型。

typeself 内置了如下类型:

  • Any:可以包含任意类型的值。
  • String:字符串类型。
  • Number:数字类型。
  • Boolean:布尔类型。
  • Undefinedundefined 类型。
  • Nullnull 类型。
  • NaNNaN 类型。
  • Array:数组类型,可以设置嵌套类型。
  • Object:对象类型,可以设置嵌套类型。
  • Tuple:元组类型,类似于数组,但必须有固定的长度和固定的每个元素类型。
  • Enum:枚举类型,限制某个字段的值只能是预定义的枚举值。
  • Union:联合类型,可以包含多个类型,只要其中一种类型满足即可通过校验。
  • Intersection:交叉类型,可以包含多个类型,需要同时满足所有类型才能通过校验。
  • Function:函数类型,可以指定参数类型和返回值类型。

除了以上内置类型以外,我们还可以通过继承 Type 后自定义新的类型。

校验方式

typeself 提供了两种校验方式:静态校验和动态校验。

静态校验

静态校验需要在编译期进行,即在代码运行之前,将类型检查的代码转换为原生 JavaScript 代码,因此可以在开发阶段就发现类型不匹配导致的类型错误。

静态校验使用 TypeScript 进行实现,因此在使用静态校验时需要安装 TypeScript

使用静态校验时,我们可以将类型定义放在类型文件中,然后在我们的代码文件中引用该类型文件。

在类定义时,我们需要给类增加一个 @Validate 的装饰器,在类实例化时就会进行校验。

示例代码如下:

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

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

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

-- --------

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

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

动态校验

动态校验是在代码运行时进行的,因此不能提前发现类型错误,但可以在一定程度上确保代码的健壮性。

使用动态校验时,我们需要使用 validate 函数进行校验,这个函数接受两个参数:类型定义和需要校验的对象。

如果校验通过,函数会返回 true,否则会抛出校验异常。

示例代码如下:

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

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

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

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

错误处理

当校验失败时,我们需要知道哪个字段出现了错误,以及出现了什么错误,typeself 提供了两个工具函数来协助我们进行错误处理:getErrorKeysgetErrorMsg

getErrorKeys 函数可以用来获取校验失败的字段名称列表,示例代码如下:

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

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

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

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

在上述代码中,由于 age 字段的值是字符串类型,而我们定义的类型中需要它是数字类型,因此 validate 会抛出校验异常,在这种情况下,getErrorKeys 函数返回的数组中就只有 age

getErrorMsg 函数可以用来获取校验失败的详细错误信息,以便我们更好地定位和修复错误,示例代码如下:

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

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

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

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

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

在上述代码中,通过 console.log(getErrorMsg(User, user, e)),我们可以输出详细的校验错误信息。

高级功能

接下来,我们介绍一些 typeself 的高级功能。

自定义类型

在前面的示例中,我们已经了解了如何定义内置类型,但是有时候内置类型并不能完全满足我们的需求,这时候我们可以自定义类型。

自定义类型需要继承自 Type,并实现 validate 方法,该方法需要返回一个布尔值,表示当前校验是否通过。

示例代码如下:

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

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

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

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

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

在上述代码中,我们定义了一个名为 Password 的自定义类型,要求其值必须是长度大于 6 的字符串。然后在 User 类型定义中使用该类型定义了一个 password 字段,最后通过 validate 方法校验了一个符合要求的用户对象。

函数类型

在 typeself 中,我们可以通过 Function 类型定义函数类型。

函数类型需要指定参数类型和返回值类型。

示例代码如下:

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

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

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

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

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

在上述代码中,我们定义了一个函数类型 Greeting,该函数需要接受一个对象类型为 { name: string; age: number } 的参数,返回一个字符串类型的值。

然后在 User 类型定义中使用该类型为 sayHello 参数指定了一个函数类型。函数类型的实现如下:

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

该函数接受一个对象参数 { name: string; age: number },返回一个字符串,因此满足函数类型的校验要求,最终 validate(User, user) 返回 true。

注意:在上述代码中,我们使用了 new Greeting<{ name: string; age: number }, string>() 来定义函数类型。这个语法是 TypeScript 特有的,其中 { name: string; age: number } 是函数类型的参数类型,而 string 则是返回值类型。如果您只需要定义一个无参无返回值的函数类型,可以这样定义:new Greeting<void, void>()

总结

本文介绍了 typeself 的基本使用方法及高级功能,通过使用 typeself,您可以有效地降低由于 JavaScript 动态类型系统而导致的错误率,增加代码的可读性和可维护性。

我们在使用 typeself 时,需要注意以下几点:

  • 类型定义是通过继承自 Type 的类来实现的。
  • typeself 提供了静态校验和动态校验两种方式。
  • typeself 提供了内置类型,同时也支持我们自定义类型。
  • 出现校验错误时,可以通过 getErrorKeysgetErrorMsg 函数进行错误处理。
  • typeself 还提供了函数类型的校验方式。

如果您还没有尝试过 typeself,现在就可以动手实践了。

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


猜你喜欢

  • npm 包 redux-shape 使用教程

    前端开发中,状态管理对于应用程序的设计和复杂程度非常重要。在 React 应用程序中,Redux 是一个流行的状态管理工具。然而,Redux 自身不提供任何数据结构或核心结构。

    3 年前
  • npm 包 wct-headless 使用教程

    在前端开发中,我们经常需要进行单元测试来保证代码质量和稳定性。wct-headless 是一个 npm 包,它可以让我们在无界面的浏览器环境中进行 Web 组件测试。

    3 年前
  • NPM 包 Vuex2VueX 使用教程

    在前端开发中,我们经常使用各种工具来提高开发效率和代码可维护性。其中,状态管理工具是非常重要的一种。Vuex2VueX 是 Vue.js 的状态管理库,它提供了一种集中式存储管理应用程序所有组件的状态...

    3 年前
  • npm 包 bst-lib 使用教程

    什么是 npm 包 bst-lib npm (Node Package Manager)是世界上最大的软件仓库之一,其中包含了各种各样的包,用于前端和后端开发。在这个仓库中,有一个叫做 bst-lib...

    3 年前
  • npm包ppcase-widget使用教程

    什么是PPCase? PPCase是一个专业的码农社区,旨在为开发者提供最新的技术资讯、交流、分享和求助,并提供代码托管、应用市场等优质服务。PPCase致力于成为中文开发者的信仰。

    3 年前
  • npm 包 @babyeyefe/localstorage 使用教程

    前言 在前端开发中,我们经常需要使用浏览器本地存储,而 LocalStorage 是其中一种比较常用且方便的方式。然而,官方提供的 LocalStorage API 的使用方式有些繁琐和不便,因此一些...

    3 年前
  • npm 包 filstem 使用教程

    简介 filstem 是一个用于文件系统操作的 Node.js 模块,它提供了一系列非常方便的方法来处理文件和目录,比如读取、创建、修改、删除、重命名等。使用 filstem 可以帮助我们更加高效地编...

    3 年前
  • npm 包 @kingjs/descriptor.object.clone 使用教程

    在前端开发中,我们经常需要操作对象数据,例如复制一个对象。但是 JavaScript 中对象是引用类型,直接复制会导致原对象和复制后的对象共用同一块内存,修改一个对象会影响到另一个对象。

    3 年前
  • npm包@kingjs/descriptor.object.writable-symbol使用教程

    前言 随着前端技术的不断发展,越来越多的开发者开始使用各种工具和库来提高自己的工作效率,其中npm包@kingjs/descriptor.object.writable-symbol就是一款非常优秀的...

    3 年前
  • npm 包 @kingjs/descriptor.writable-symbol 使用教程

    简介 @kingjs/descriptor.writable-symbol 是一个 npm 包,它提供了一种方便的方法来创建可写的 Symbol。这可以非常有用,例如在创建对象时创建一个纯粹的数据描述...

    3 年前
  • npm 包 `generator-node-module-ts` 使用教程

    导语 当你在进行 Node.js 开发时,难免会涉及到创建 npm 包。而在创建的过程中,我们根据业务需求需要编写不同的代码,而这些代码可能会被用于多个项目中,因此,我们需要一种工具来帮助我们快速创建...

    3 年前
  • npm 包 @thematter_io/plasma.js 使用教程

    前言 随着前端技术的不断发展,现代前端开发越来越复杂,需要使用各种工具和框架来提高开发效率。其中,npm(Node Package Manager),是一个非常重要的工具,可以方便地下载并安装我们需要...

    3 年前
  • npm包 nvcli使用教程

    Nvcli 是一个基于命令行的工具,它可以对npm仓库进行查询,让我们能够更快捷地查询和安装npm包,而不需要去网页进行搜索和下载。 在本文中,我们将介绍如何安装和使用nvcli,并提供几个关于其实用...

    3 年前
  • npm 包 vue-co-dialog 使用教程

    在前端开发中,经常需要使用到弹窗功能。而 vue-co-dialog 是一个方便易用的 npm 包,可以帮助我们快速实现各种类型的弹窗。该 npm 包提供了丰富的选项和功能,可以满足大部分的业务需求。

    3 年前
  • npm 包 @kingjs/descriptor.is-frozen 使用教程

    如今前端开发中,我们经常需要用到对象。而对象可以包含若干个属性,这些属性都可以单独进行访问和修改。但是,由于 JavaScript 是一门动态语言,属性的新增和修改并没有受到限制,所以对象的属性会变得...

    3 年前
  • npm 包 elmish-ts 使用教程

    什么是 elmish-ts elmish-ts 是一个 JavaScript 库,它提供了一个用于构建在架构上工作的应用程序的模型,以及减少了在应用程序中出现的错误数量的 API。

    3 年前
  • npm 包 @kingjs/descriptor.clone 使用教程

    在前端开发过程中,经常会遇到需要对 JavaScript 对象进行深度克隆的情况。而 npm 包 @kingjs/descriptor.clone 就是一款很好的解决方案。

    3 年前
  • npm 包 express-body-trimmer 使用教程

    在开发前端应用的过程中,我们通常需要使用 Node.js 和 Express 框架来搭建后端服务器。然而,请求体中传递的数据往往是非常混乱和冗长的,这就需要我们对传入的数据进行处理。

    3 年前
  • npm 包 js-avl-tree 使用教程

    在前端开发中,使用数据结构是一个很常见的需求。而 AVL 树是一种自平衡二叉搜索树,是一种比较常用的数据结构。在 JavaScript 中,使用 npm 包 js-avl-tree 可以方便地实现 A...

    3 年前
  • npm 包 project-watcher 使用教程

    前言 在前端开发过程中,我们经常需要管理多个项目,针对这一情况,npm 包 project-watcher 提供了一种监视多个项目并自动执行任务的解决方案。本文将详细介绍该 npm 包的使用方法和注意...

    3 年前

相关推荐

    暂无文章