npm 包 ts-transform-json-schema 使用教程

阅读时长 5 分钟读完

引言

在前端开发中,我们经常会遇到需要处理 JSON 数据的情况。而在 TypeScript 中,面对复杂的 JSON 数据结构时,我们需要手动定义一套 TypeScript 接口来对 JSON 进行类型检查,这样的工作实在繁琐且易出错。

为此,有开发者借鉴了 Swagger/OpenAPI 标准,提出了 JSON Schema 标准。与此同步,一些 TypeScript 开发者将其引入到代码中,希望自动生成 TypeScript 接口以解决上述问题。而 ts-transform-json-schema 正是为此而生。

在本文中,我将会为大家介绍 ts-transform-json-schema 的使用方法,并结合实际示例演示其强大的功能和指导意义。

安装和基本使用

使用 npm 安装 ts-transform-json-schema:

接下来,在 tsconfig.json 文件中添加以下配置:

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

然后编写如下代码:

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

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

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

通过执行 tsc 命令,即可在项目根目录下生成一个名为 schema.g.ts 的 TypeScript 文件,其中包含了一个名为 Message 的 TypeScript 接口,与我们手动定义的 interface Message 一致。

高级用法

除了基本用法之外,ts-transform-json-schema 还提供了一些高级的用法,比如:

输出到独立的 .d.ts 文件

通常,我们在声明某个 package 的类型时,需要将其 type 声明单独保存到一个 .d.ts 文件中。此时,我们可以使用 ts-transform-json-schema 配合 outFile 选项来在独立的文件中生成 JSON Schema 定义。修改 tsconfig.json 文件:

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

在上述配置中,我们指定了 declarationdeclarationDir 选项来生成单独的 .d.ts 文件,同时指定了 outFile 选项来生成独立的 JSON Schema 定义文件。

定义模式

我们可以通过为 ts-transform-json-schema 传递 options 对象来定义模式。比如:

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

其中:

  • externalResolver 选项决定了是否使用外部解析器来解析模块路径(默认为 'mock');
  • fallback 选项用于定义当遇见无法处理的类型时,转而采用的默认类型;
  • renameProperties 选项用于对 JSON 中的属性名重新命名。

为单独的 .ts 文件定义定义模式

针对某个特定的 .ts 文件,我们可以使用 TypeScript 的标记注释来定义 JSON Schema 的类型。

比如:

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

<JSON Schema> 部分必须是一个合法的 JSON Schema 数据格式,且需要被注释 // @ts-json-schema: 所包裹起来。

总结

在本文中,我们学习了如何使用 ts-transform-json-schema 为我们自动生成复杂 JSON 数据的 TypeScript 接口,极大地提高了我们的开发效率。同时,我们还介绍了一些高级的用法,如输出到独立的 .d.ts 文件、定义模式等等。希望本文对大家有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/ts-the-transform-json-schema