类型
OpenAPI Docs的简单生成器 TypeScript 类型 .
安装
- 安装国家预防机制软件包:
npm install --save-dev @adbros/typegen。 。 。 . - 创建一个
typegen.config.mjs文件并导出一个有效的配置对象。 见 配置 (下)详.
使用量
OpenAPI doc 每次更改, 运行 npx typegen 包含 typegen.config.mjs。 。 。 .
配置
这个 typegen.config.mjs 文件在运行时应在当前工作目录中显示 typegen 函数。 (从总体上讲,它最符合逻辑的是在项目的根目录中 -- -- 旁边是 package.json, (中文(简体) ), tsconfig.json(见a/c.5/49/70,附件).
配置对象导出自 typegen.config.mjs (使用无害环境管理默认导出)应具有以下特性:
inputDoc(必须) -- 包含输入路径的字符串 OpenAPI 3.0.x 打开API 3.0.x 医生.outputDir(必须) -- 包含输出目录路径的字符串.hooks- 说吧 包含方便真菌的可选儿童配置对象,在类型生成本身之前/之后使用. 这两种功能都是可选的。 两者皆以零辩相取. 两者都可能还回一个承诺;程序的执行会被阻止,直到承诺解决. 两者都可能抛出或还回最终被否决的承诺,在这种情况下,程序将以非零退出代码提前终止.before-- 在输入文件装入前已调用 。 例如用于从外部来源取取doc,从其他数据取取取doc,在doc上进行自定义验证(并投掷/拒绝无法防止类型生成本身)等.after-- 在类型生成完成并写入文件后调用. 有用, 例如用于自定义生成文件的后处理 .
endpoints- 说吧 一个可选的儿童配置对象,包含与渲染端点相关的选项,作为任意的TypeScript构造. 如果没有给出,endpoints.ts完全没有生成。 如果给它,它 必须包含数字 :renderEach- 一个函数,要求每个端点(即每个路径方法对),即将关于指定端点的现有信息映射到包含任意类型脚本代码的字符串上. 如果有的话 无效 值从函数返回,而不是输出中排除给定的终点。 该函数总是用单个参数调用 -- -- 一个包含以下属性的对象:path(单位:千美元)string-- 输入文件所指定的路径;method(单位:千美元)string)- 小写中HTTP方法的名称,例如.post· ;pathType(单位:千美元)string)- 描述路径包括路径参数的字符串字面类型或模板字面类型,例如.`/customer/${number}/invoices`· ;requestType(单位:千美元)string) --请求正文的类型,例如.Invoice· ;responseType(单位:千美元)string) -- 状态代码响应机构的类型200,比如说.{ invoices: Invoice[]; totalCount: number }· ;paramsType(单位:千美元)string)- 描述对象的类型,其中每个属性对应端点接受的单个查询参数,例如.GetInvoicesParams(定义于params.ts例如,《公约》第2条第1款(a)项.{ limit: number; offset: number }(三);paramsExpected(单位:千美元)boolean) --是否至少有一个查询参数被终点接受;paramsRequired(单位:千美元)boolean) -- 终点是否至少需要一个查询参数;bodyExpected(单位:千美元)boolean-- -- 终点是否期望请求体;bodyReturned(单位:千美元)boolean) -- 端点是否返回每个响应中带有状态代码的正文200。 。 。 .
renderModule-- 绘制压缩输出的函数renderEach调用包含最终 TypeScript 模块的字符串。 独有财产的物体content。 。 。 .
示例
以下配置定义了有效子类型的生成 阿克索斯语Name 例如,只允许使用超载方法签名调用现有端点。 这是有用的,因为:
- 对不存在的终点的呼声不予批准;
- 执行正确的请求机构/参数;
- 返回类型 -- -- 对应于匹配端点的响应类型 -- -- 每次有效呼叫都会自动推断出.
export default {
inputDoc: 'path/to/openapi.yaml',
outputDir: 'path/to/output/directory'
endpoints: {
renderModule: ({ content }) => `export type Api = { ${content} };`,
renderEach: ({
method,
pathType,
requestType,
responseType,
paramsType,
paramsExpected,
paramsRequired,
}) => {
switch (method) {
case 'get':
return paramsExpected
? `${method}(
path: ${pathType},
config${paramsRequired ? '' : '?'}:
{ params: ${paramsType} },
): Promise<{ data: ${responseType} }>;`
: `${method}(
path: ${pathType},
): Promise<{ data: ${responseType} }>;`;
case 'post':
case 'put':
return `${method}(
path: ${pathType},
body: ${requestType},
): Promise<{ data: ${responseType} }>;`;
default:
return `${method}(
path: ${pathType},
): Promise<{ data: ${responseType} }>;`;
}
},
},
};