你遇到的前后端重复定义问题是全栈开发中的常见痛点。针对你目前的技术栈(后端 Java + Spring Boot,前端 TypeScript + Vue/React 等),有几种成熟的解决方案可以彻底消除这种重复劳动。

推荐方案:使用 OpenAPI(Swagger)自动生成前端类型

这是业界最标准、维护成本最低的方案。你只需在后端写好 Java 类(加上注解),前端的所有接口类型就可以自动生成。

具体实施步骤

1. 后端集成 springdoc-openapi(如果还没做)

在 pom.xml 中添加依赖:

xml

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.5.0</version>
</dependency>

启动项目后访问 http://localhost:8080/v3/api-docs 就能获得 OpenAPI JSON 描述文件。

2. 前端使用工具生成 TypeScript 类型

推荐使用 openapi-typescript(轻量,只生成类型)或 openapi-generator(功能更全)。

安装 openapi-typescript:

bash

npm install -D openapi-typescript

添加 npm 脚本:

json

"scripts": {
  "gen:api": "openapi-typescript http://localhost:8080/v3/api-docs -o src/api/generated.ts"
}

运行后,CapitalUseResponse 会自动转换成 TypeScript 接口,无需手写。

3. 处理类型映射差异

openapi-typescript 默认的映射规则基本符合你的需求(integer → numbernumber → number)。对于 BigDecimal 后端会生成 type: number,前端直接使用 number 即可。

如果有个性化需求(比如想把 date-time 映射成 Date 对象),可以通过配置实现。

替代方案对比

方案 优点 缺点 适用场景
OpenAPI 生成 标准、生态成熟、支持请求/响应/校验 需要后端增加注解 绝大多数 RESTful 项目
GraphQL + 生成器 前端可精确选择字段,强类型 学习曲线陡峭,需改造接口 对数据查询灵活性要求极高
JSON Schema + 自定义脚本 完全可控,无第三方依赖 需要自己写生成脚本 不想引入 Swagger 的轻量场景
手动同步 + ESLint 检查 无额外工具 100% 重复劳动,易出错 不推荐

你的场景最适合 OpenAPI

因为你是单人开发,使用 OpenAPI 可以:

  • 后端只需写一次类(用 @Schema 注解可以补充说明,但不是必须)。

  • 前端类型自动生成,而且生成后的类型会直接与后端保持同步(每次后端改完字段,前端重新生成即可)。

  • 同时生成 API 调用函数(配合 openapi-typescript-codegen 或 orval 还可以生成 axios 请求代码)。

示例:生成后的前端类型长什么样

typescript

// generated.ts 自动生成,不用手写
export interface CapitalUseResponse {
  id: number;
  capitalNo: string;
  capitalName: string;
  // ... 所有字段自动出现
  activityInstanceInfo: ActivityInstanceInfo;
}

额外技巧:后端类也能减少重复?

如果你连后端 DTO 也不想一个个手写字段,可以考虑使用 MapStruct 或 Lombok + 注解 来自动映射,但字段定义本身还是得写一次。不过相比前后端都写,已经少了一半工作量。

总结

立即行动:在后端加上 springdoc-openapi,前端用 openapi-typescript。以后你只需要修改 Java 类,运行一条命令就能得到最新的前端类型定义,彻底告别重复劳动。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐