RTK Query代码生成时如何自定义生成更简短的模型名称?
覆写RTK Query OpenAPI代码生成的模型命名规则
生成的模型名携带冗余前后缀是默认拼接Schema全路径命名空间的设计导致的,无需手动修改生成产物,直接修改codegen配置即可自定义命名规则。
基础配置方法
运行代码生成命令时传入的TS格式配置文件中,提供了命名格式化钩子,直接编写转换逻辑截断冗余文本即可,示例配置如下:import type { Config } from '@rtk-query/codegen-openapi' // 重名计数器,避免截断后出现命名冲突 const schemaNameCounter = new Map<string, number>() const config: Config = { schemaFile: './path/to/your/openapi.json', apiFile: './src/store/baseApi.ts', outputFile: './src/store/generatedApi.ts', // 模型名转换核心逻辑 formatSchemaName: (rawName) => { // 按需调整正则,匹配自身项目的固定冗余前缀、后缀 let processedName = rawName .replace(/^MyCompanyServiceMyServiceNameWebModels/, '') .replace(/(Model|Dto|ViewModel)$/, '') // 重名时自动追加序号后缀 if (schemaNameCounter.has(processedName)) { const count = schemaNameCounter.get(processedName)! schemaNameCounter.set(processedName, count + 1) processedName = `${processedName}${count + 1}` } else { schemaNameCounter.set(processedName, 1) } return processedName }, // 接口名、自动生成的Hook名存在冗余时,可通过对应钩子同步调整 // formatEndpointName: (rawName) => { /* 转换逻辑 */ }, // formatHookName: (rawName) => { /* 转换逻辑 */ } } export default config非固定前缀适配方案
若项目中不同服务的冗余前缀不固定,无需硬编码前缀字符串,可调整正则做通用匹配:// 截除所有到WebModels、Contracts、Dtos等分层关键词为止的前缀 let processedName = rawName.replace(/^.*(WebModels|Contracts|Dtos)/, '')也可以在执行codegen前编写轻量Node脚本预处理OpenAPI源文件:遍历
components.schemas节点,批量替换Schema key的冗余文本,提前处理重名冲突后保存为临时文件,再将临时文件作为schemaFile传入配置,生成效果和使用格式化钩子完全一致。注意事项
无论使用哪种转换方式,都必须保留重名校验逻辑,避免不同模块下的同名模型截断后出现命名覆盖,引发生成的API代码类型错误。
内容的提问来源于stack exchange,提问作者user3284707
相关产品推荐
相关产品推荐

