You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:06:26