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

Express+TypeScript大型项目类型定义的文件夹结构咨询

Express + TypeScript 大型项目的类型定义结构方案

1. 完全可以沿用Java的models/dto结构

TypeScript的类型系统完全支持这种分层逻辑,对于有Java背景的团队来说,上手成本极低,逻辑也清晰:

  • models:对应数据库实体的类型定义,比如UserModel对应数据库users表的完整结构,包含主键、创建时间、更新时间等所有字段。
  • dtos:对应接口请求/响应的数据传输对象,比如CreateUserDto只包含创建用户时必填的字段(用户名、密码、邮箱),UserResponseDto则返回给前端脱敏后的用户信息(隐藏敏感字段、只保留必要内容)。

2. 常见的其他类型组织方式及适用场景

你提到的几种方式各有优劣,适配不同规模的项目:

  • 集中式type.ts/enum.ts:适合小型项目或存放全局通用类型(比如全局枚举、基础工具类型),但大型项目里会导致单个文件臃肿,查找和维护成本飙升,不推荐作为核心结构。
  • 按模块拆分的interface文件(如users.interface.ts):更适合模块化的大型项目,把单个业务模块的所有类型(实体、DTO、枚举)集中在一个文件里。如果模块类型较多,还可以进一步拆分成users.model.ts、users.dto.ts、users.enum.ts,细粒度拆分后更易维护。

3. 推荐的最优实践(结合分层与模块化)

大型项目里,建议结合全局通用类型和业务模块类型的分层结构,示例如下:

src/
├── types/                # 全局通用类型目录
│   ├── common.ts         # 存放全局枚举(如HttpStatus)、基础工具类型(如PaginatedResult)
│   └── env.d.ts          # 环境变量的类型定义
├── modules/              # 业务模块目录
│   ├── users/
│   │   ├── users.controller.ts
│   │   ├── users.service.ts
│   │   ├── models/
│   │   │   └── user.model.ts    # 数据库实体类型
│   │   ├── dtos/
│   │   │   ├── create-user.dto.ts
│   │   │   └── user-response.dto.ts
│   │   └── enums/
│   │       └── user-role.enum.ts
│   └── posts/
│       ├── posts.controller.ts
│       ├── posts.service.ts
│       ├── models/
│       │   └── post.model.ts
│       └── dtos/
│           ├── create-post.dto.ts
│           └── post-response.dto.ts
└── app.ts

几点注意事项

  • 避免过度拆分:如果某个业务模块的类型很少(比如只有2-3个),不用硬拆成多个文件夹,一个users.types.ts足够。
  • 命名清晰统一:用*.model.ts、*.dto.ts、*.enum.ts这类后缀,让团队成员一眼就能识别文件用途。
  • 用类型导入优化:导入类型时使用import type { User } from './models/user.model',避免编译时生成冗余代码。

内容的提问来源于stack exchange,提问作者Perla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:20:25