生成 typescript interface 例子

.templates.tpl.js 中添加 handlebars 自定义钩子

// templates 注入 例子。 不能使用 js 高级语法。
// 插件官方说明文档: http://niuhe.zuxing.net/chapter4/section6.html
// handlebars详细例子参考 https://handlebarsjs.com/zh/

handlebars.registerHelper('convertType', function (type) {
    const typeMap = {
        'string': 'string',
        'stringenum': 'string',
        'number': 'number',
        'float': 'number',
        'double': 'number',
        'int': 'number',
        'long': 'number',
        'enum': 'number',
        'integer': 'number',
        'boolean': 'boolean',
        'object': 'any',
        'array': 'any[]',
        'map': 'any',
    };
    return typeMap[type] || type;
});

template 编写


// Generated by niuhe.idl
// 此文件由 niuhe.idl 自动生成, 请勿手动修改

interface Rsp<T> {
    result: number
    data: T
    message: string
}

declare namespace {{capitalize mod}} {
 {{#each items}}
 {{#if desc}}
    /** {{desc}} */
 {{/if}}
    interface {{name}} {
        {{#each fields}}
        {{#if desc}}
        /** {{desc}} */
        {{/if}}
        {{#if (isArray label)}}
        {{ json }}: {{ convertType type }}[],
        {{else}}
        {{ json }}: {{ convertType type }},
        {{/if}}
        {{/each}}
    }

{{/each}}
}

.config.json5 参考配置

 {
    templates: [{
      modes: ["api"],
      template: "./templates/ts_messages.tpl",
      type: "message",
      output: "./output/messages.d.ts",
    }]
 }