Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>nswag-tsNew to Visual Studio Code? Get it now.
nswag-ts

nswag-ts

hezechang

|
37 installs
| (1) | Free
通过swagger.json 生成 typescript 接口调用代码
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

nswag-ts

介绍

根据 swagger 文档生成 typescript 客户端调用代码

使用说明

  1. 第一步:项目根目录下右键,执行:nswag-ts.init 初始化模板
  2. 第二步:修改项目目录下的 nswag.js 文件,配置 swagger 文档地址,生成代码的输出目录等参数
  3. 第三步:选中nswag.js文件,右键,执行:nswag-run 执行代码生成
  • nswag.js 为配置文件

    • 配置所有需要生成的接口,及相应的生成规则,详见 【配置参数】
  • template 文件里面是代码模板(可以根据自己的实际情况调整模板)

    • base.ejs.t 接口调用基类模板,默认使用了 axios
    • method.ejs.t 接口函数生成模板
    • model.ejs.t 接口对象生成模板
    • mock.ejs.t 模拟数据代码生成模板-调用
    • mock-method.ejs.t 模拟数据代码生成模板-接口实例

配置参数

{
  Name: 'nswag-ts',
  Description: '根据swagger文档生成typescript客户端调用代码',
  Apis: [
    {
      SwaggerUrl: string // 接口文档地址(必填)
      ApiBase: string // 接口根节点(必填)
      ApiName: string // 接口名称(必填)
      OutPath: string // 输出目录(默认:项目根目录:/src/api/)
      TplPath: string // 模板路径(默认:初始化后会自动copy模板文件夹到项目根目录:nswag,如果进行了修改则需配置此目录)
      Mock: boolean // 是否启用模拟数据 (默认:false)
      FormatControllerName: Function // 格式化模块名称(默认:接口名称+Api)
      FormatMethodName: Function // 格式化接口名称(默认:小驼峰命名)
      FormatModelName: Function // 格式化dto对象、枚举名称(默认:只会去除特殊字符)
      FormatMock: Function // 接管模拟数据格式化
    }
  ],
  // 采用prettier格式化代码,不启用则去除该节点配置,配置 参考 https://prettier.io/docs/en/options
  prettier: {
    parser: 'babel-ts',
    singleQuote: true,
    printWidth: 180,
    tabWidth: 2,
    semi: false,
    trailingComma: 'none'
  }
}
格式化函数示例
  /**
   * 格式化模块名称(默认:接口名称+Api)
   * @param name 名称
   */
  public formatControllerName(name: string) {
    return name.indexOf('Api') !== -1 ? name : name + 'Api'
  }

    /**
   * 格式化接口名称(默认:小驼峰命名)
   * @param name 名称
   */
  public formatMethodName(name: string) {
    if (name === '/' || name === '') {
      return ''
    }
    const fnName = name.substring(name.lastIndexOf('/'))
    return _.camelCase(fnName)
  }

   /**
   * 格式化dto对象、枚举名称(默认:只会去除特殊字符)
   * @param name 名称
   */
  public formatModelName(name: string) {
    return name.substring(name.lastIndexOf('/') + 1).replace(/[.,\[\]]/g, '_')
  }

    /**
   * 格式化模拟值
   * @param val 默认格式化后的值
   * @param p 对应的属性
   * @param mock 最终模拟数据
   */
  public formatMock(val: any, p: Propertie, mock: any) {
    switch (p.type) {
      case 'string':
        switch (p.name) {
          case 'name':
            val = '@cname'
            break
          case 'title':
            val = '@ctitle(10, 20)'
            break
          case 'mobile':
            val = '@natural(10000)'
            break
          case 'email':
            val = '@email'
            break
          case 'province':
            val = '@province'
            break
          case 'city':
            val = '@city'
            break
          case 'area':
            val = '@county'
            break
          default:
            val = '@ctitle(10, 20)'
            break
        }
        mock[p.name] = val
        break
      case 'number':
        switch (p.name) {
          case 'result_code':
            val = 0
            break
          case 'page_index':
            val = 1
            break
          case 'page_size':
            val = 15
            break
          case 'total_count':
            val = 30
            break
          default:
            val = '@integer(0, 100)'
            break
        }
        mock[p.name] = val
        break
      case 'array':
        mock[p.name + '|20'] = val
        break
      default:
        mock[p.name] = val
        break
    }
    return mock
  }

代码格式化

// 采用prettier格式化代码,不启用则去除该节点配置,配置 参考 https://prettier.io/docs/en/options
prettier: {
  parser: 'babel-ts',
  singleQuote: true,
  printWidth: 180,
  tabWidth: 2,
  semi: false,
  trailingComma: 'none'
}

模板编辑

// 新版本nswag-ts,优化了模板文件的数据源结构,更大程度的采用了swagger原本的数据格式,但是swagger 数据格式不太好构件相关接口定义,所以nswag-ts提供了一系列用于数据转化的方法,可以在模板文件中直接调用,通过这些方法能够减轻模板代码的编写,也可以拥有更多的自定义用法。


函数列表:
1、格式化参数对象,获取指定类型的参数
this.getParameter(参数对象,['query','body'],callback)

2、获取指定控制器依赖的模块
this.getTagModels(tag)

3、格式化返回对象
this.getResponses(m.responses)

4、获取全部类型和枚举对象
this.getModelsAndEnums()

5、根据返回对象,生成Mock数据
this.mock(responses, data.Models)

6、获取全部控制器,swagger里面对应tag标签
this.getTags()

代码仓库

https://gitee.com/money-code/nswag-ts-vscode

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2025 Microsoft