生成 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",
}]
}