iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么实现自动生成typescript类型声明工具
  • 687
分享到

怎么实现自动生成typescript类型声明工具

2023-07-05 21:07:04 687人浏览 八月长安
摘要

本篇内容主要讲解“怎么实现自动生成typescript类型声明工具”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现自动生成typescript类型声明工具”吧!在TypeScript 项目

本篇内容主要讲解“怎么实现自动生成typescript类型声明工具”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现自动生成typescript类型声明工具”吧!

    在TypeScript 项目中,我们经常需要使用声明一系列的ts类型。然而,手动写的效率实在太低,编写一个自动生成ts类型的工具可以解放生产力。 实现一个工具将 JSON 数据转换为 TypeScript 类型定义,从而让 TypeScript 项目更高效的开发

    一、实现的功能

    • jsON 数据转换为 TypeScript 类型定义。

    • 支持嵌套的复杂类型,如数组和对象。

    • 支持自定义类型名称和命名空间。

    • 支持将转换后的 TypeScript 类型定义保存为文件。

    二、工具使用方法

    在线playground使用:在线json转ts类型声明

    已经发布到npm:my-json-to-ts - npm (npmjs.com)

    运行效果如下动图:

    怎么实现自动生成typescript类型声明工具

    安装工具:

    npm install -g my-json-to-ts

    运行工具:

    my-json-to-ts input.json output.ts

    其中 input.json 是要转换的 JSON 文件路径,output.ts 是转换后的 TypeScript 文件路径。

    --name 类型名称    # 指定转换后的类型名称,默认为 JsonType--namespace 命名空间 # 指定转换后的命名空间,默认为无--no-file          # 不将转换后的 TypeScript 类型定义保存为文件

    三、实现思路

    • 读取输入的 JSON 文件,解析成 JSON 对象。

    • 遍历 JSON 对象,根据不同的类型生成对应的 TypeScript 类型定义字符串

    • 如果指定了类型名称和命名空间,则在生成的 TypeScript 类型定义字符串前面添加对应的声明。

    • 如果指定了保存文件,则将生成的 TypeScript 类型定义字符串写入文件。

    四、使用示例

    以下是将JSON 数据和转换后的 TypeScript 类型定义示例:

    简单的JSON 数据

    {  "name": "John",  "age": 30,  "address": {    "city": "New York",    "state": "NY"  },  "hobbies": [    "reading",    "traveling"  ]}

    输出对应简单的类型定义

    interface JsonType {  name: string;  age: number;  address: {    city: string;    state: string;  };  hobbies: string[];}

    复杂的JSON 数据

    {  "name": "John",  "age": 30,  "address": {    "city": "New York",    "state": "NY",    "postalCode": 10001  },  "friends": [    {      "name": "Jane",      "age": 28,      "address": {        "city": "Los Angeles",        "state": "CA"      }    },    {      "name": "Bob",      "age": 35,      "address": {        "city": "ChicaGo",        "state": "IL"      }    }  ],  "hobbies": [    "reading",    "traveling",    {      "name": "swimming",      "location": "pool"    }  ]}

    输出对应复杂类型定义

    interface JsonType {  name: string;  age: number;  address: {    city: string;    state: string;    postalCode: number;  };  friends: {    name: string;    age: number;    address: {      city: string;      state: string;    };  }[];  hobbies: (string | {    name: string;    location: string;  })[];}

    五、具体实现代码

    首先引入两个 node.js 模块:fs-extracommanderfs-extra 是一个简化了 node.js 文件系统模块的封装,而 commander 是一个命令行工具的库,可以方便地解析命令行参数。

    接下来定义一个函数 jsonToTs,用于将 JSON 数据转换为 TypeScript 类型定义字符串。该函数采用递归的方式遍历 JSON 数据,生成对应的 TypeScript 类型定义。如果 JSON 数据是数组,则递归处理其中的每个元素;如果是对象,则递归处理其中的每个属性。最终,该函数返回一个 TypeScript 类型定义字符串。

    然后定义了两个异步函数,readJsonwriteTs,分别用于读取 JSON 文件和将 TypeScript 类型定义字符串写入文件。

    最后定义一个名为 jsonToTsFile 的函数,该函数接收命令行参数并将其传递给 jsonToTs 函数,然后将生成的 TypeScript 类型定义字符串保存到文件中。如果命令行参数中指定了不保存文件,则该函数将直接将 TypeScript 类型定义字符串输出到控制台。

      const fs = require('fs-extra');  const commander = require('commander');    function jsonToTs(object, name = 'JsonType', namespace) {      const getType = value => {          let typeRes = ``;          if (Array.isArray(value)) {              value.forEach(item => {                  let subType = getType(item);                  if (typeRes.split('|').indexOf(subType) < 0) {                      typeRes += subType                      typeRes += "|"                  }              })              typeRes = typeRes.substring(0, typeRes.length - 1)               if (typeRes.split('|').length > 1) {                  return `(${typeRes})[]`;                } else {                  return `${typeRes}[]`;                }          }          if (typeof value === 'object' && value !== null) {              const props = Object.entries(value)                  .map(([key, val]) => `${key}: ${getType(val)}`)                  .join('; ');              return `{ ${props} }`;          }          return typeof value;      };      const type = getType(object);      const declaration = `interface ${name} ${type}`;      return namespace ? `namespace ${namespace} { \r\n ${declaration} \r\n}` : declaration;  }    async function readJson(path) {      const content = await fs.readFile(path, 'utf8');      return JSON.parse(content);  }    async function writeTs(content, path) {      await fs.writeFile(path, content, 'utf8');  }    async function jsonToTsFile(inputPath, outputPath, options) {      const { name, namespace, noFile } = options      try {          const object = await readJson(inputPath);          const type = jsonToTs(object, name, namespace);          if (noFile) {              console.log(type);          } else {              await writeTs(type, outputPath);              console.log(`Type definition saved to ${outputPath}`);          }      } catch (err) {          console.error(err.message);      }  }  const program = new commander.Command();  program      .arguments('<input> <output>')      .option('--no-file', 'do not save to file')      .option('-s, --namespace <namespace>', 'type namespace')      .option('-n, --name <name>', 'type name', 'JsonType')      .action(jsonToTsFile);  program.parse(process.argv);

    到此,相信大家对“怎么实现自动生成typescript类型声明工具”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: 怎么实现自动生成typescript类型声明工具

    本文链接: https://www.lsjlt.com/news/355415.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 怎么实现自动生成typescript类型声明工具
      本篇内容主要讲解“怎么实现自动生成typescript类型声明工具”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现自动生成typescript类型声明工具”吧!在TypeScript 项目...
      99+
      2023-07-05
    • 自动生成typescript类型声明工具实现详解
      目录一、实现的功能二、工具使用方法三、实现思路四、使用示例🚲简单的JSON 数据🚲输出对应简单的类型定义✈复杂的JSON 数据✈输出对应复杂类型定义五、具体实现代码六、写在最后 在T...
      99+
      2023-05-14
      自动生成typescript类型声明 typescript类型声明
    • 基于JS实现将JSON数据转换为TypeScript类型声明的工具
      目录一、实现的功能二、工具使用方法三、实现思路四、使用示例简单的JSON 数据输出对应简单的类型定义复杂的JSON 数据输出对应复杂类型定义五、具体实现代码六、写在最后在TypeSc...
      99+
      2023-05-14
      JS实现JSON转TypeScript类型声明 JS JSON转TypeScript类型声明 TypeScript类型声明
    • 基于JS怎么将JSON数据转换为TypeScript类型声明的工具
      这篇文章主要介绍“基于JS怎么将JSON数据转换为TypeScript类型声明的工具”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于JS怎么将JSON数据转换为TypeScript类型声明的工具”...
      99+
      2023-07-05
    • C#中怎么实现类型声明
      本篇文章给大家分享的是有关C#中怎么实现类型声明,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C#类型声明定义新的引用类型。一个类可以从另一个类继承,并且可以实现多个接口。类成...
      99+
      2023-06-17
    • SpringbootMybatisPlus自动生成工具类详解代码
      前言 代码生成器,也叫逆向工程,是根据数据库里的表结构,自动生成对应的实体类、映射文件和接口。 看到很多小伙伴在为数据库生成实体类发愁,现分享给大家,提高开发效率。 一、pom依赖 ...
      99+
      2024-04-02
    • Hibernate自动生成工具Schema怎么用
      这篇文章主要介绍Hibernate自动生成工具Schema怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Hibernate Schema自动生成可以从你的映射文件使用一个Hibernate工具生成DDL。 生成...
      99+
      2023-06-17
    • AbstractProcessor扩展MapStruct自动生成实体映射工具类
      目录1 背景2 现有技术3 扩展设计3.1 mapstruct 介绍3.2 改进方案4 实现4.1 技术依赖4.2 实现步骤5 实践5.1 引入依赖5.2 对象定义5.3 生成结果5...
      99+
      2023-01-28
      AbstractProcessor MapStruct MapStruct实体映射工具类
    • idea自动生成实体类怎么实现
      实现自动生成实体类的一个方法是使用反射机制和注解来实现。 首先,在需要自动生成实体类的项目中定义一个注解,例如 @Entity 注解...
      99+
      2023-10-24
      idea
    • TypeScript内置工具类型怎么使用
      这篇文章主要介绍“TypeScript内置工具类型怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“TypeScript内置工具类型怎么使用”文章能帮助大家解决问题。一、什么是ts内置工具类型T...
      99+
      2023-07-05
    • Java实现滑动验证码生成(后端工具类)
      目录一、滑动验证码生成思路二、主要方法三、生成代码四、测试结果一、滑动验证码生成思路 1、随机选择一张图片 2、生成滑块起点位置(x, y) 3、生成滑块轮廓 4、抠出滑块 5、将滑...
      99+
      2022-11-13
      Java滑动验证码 Java 验证码
    • AbstractProcessor扩展MapStruct如何自动生成实体映射工具类
      今天小编给大家分享一下AbstractProcessor扩展MapStruct如何自动生成实体映射工具类的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,...
      99+
      2023-07-05
    • eclipse怎么自动生成实体类
      在Eclipse中生成实体类通常使用插件或者工具,以下是一种常见的方法: 首先,确保你已经安装了相关的插件或者工具。比如,可以在...
      99+
      2024-03-02
      eclipse
    • java怎么自动生成实体类
      在Java中,有几种方法可以用来自动生成实体类: 使用IDE的自动生成工具:大部分集成开发环境(IDE)如IntelliJ ID...
      99+
      2024-03-04
      java
    • java怎么实现api自动生成
      Java中可以使用反射和动态代理来实现API的自动生成。 使用反射:通过反射可以在运行时获取类的信息和方法的信息,可以利用这些信...
      99+
      2023-10-23
      java
    • PHP实现动态表单生成工具详解
      目录Form介绍特点项目主页链接安装方法快速使用链式操作创建块表单数组配置创建块表单行内表单table表单表单包含多种input类型,包括 hiiden类型 ,text类型,radi...
      99+
      2024-04-02
    • 数据库怎么自动生成实体类
      有多种方法可以自动生成数据库实体类,以下是常见的几种方法:1. 使用ORM框架:许多ORM框架都有自动生成实体类的功能,例如Hibe...
      99+
      2023-08-15
      数据库
    • TypeScript编写自动创建长度固定数组的类型工具详解
      目录前言代码判断 List 的长度是否等于 Len前言 在 TypeScript 中,当需要一个长度固定的数组时,通常会想到使用元组来进行表示,不过相对于数组而言,元组的每个元素的类...
      99+
      2024-04-02
    • excel怎么自动生成工作表
      Excel可以通过以下步骤来自动生成工作表:1. 打开Excel并创建一个新的工作簿。2. 在工作簿中选择要生成工作表的位置。3. ...
      99+
      2023-10-07
      excel
    • 怎么用java工具类生成验证码
      要使用Java工具类生成验证码,可以按照以下步骤进行操作: 创建一个名为CaptchaUtil的Java工具类。 导入java.u...
      99+
      2023-10-21
      java
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作