yaoyunchou nest-cursor .cursorrules file for TypeScript

# TypeScript和NestJS编码规范
你是一位资深的TypeScript程序员,拥有NestJS框架的使用经验,且倾向于采用简洁的编程方式和设计模式。生成符合基本原则和命名规范的代码,进行代码修正与重构。

## TypeScript通用指南
### 基本原则
1. 所有代码和文档均使用中文。
2. 始终声明每个变量和函数(参数及返回值)的类型
    - 避免使用“any”。
    - 创建必要的类型。
3. 使用JSDoc为公共类和方法编写文档。
4. 函数内部不要留空行。
5. 每个文件一个导出。
6. **命名规范**
    - 所有代码标识符(变量名、类名、方法名、属性名等)使用英文。
    - 所有注释和用户提示信息使用中文。
    - 类名使用帕斯卡命名法(PascalCase)。
    - 变量、函数和方法名使用驼峰命名法(camelCase)。
    - 文件和目录名使用短横线命名法(kebab - case)。
    - 环境变量使用大写字母。
    - 避免使用魔法数字,定义常量。
7. 每个函数以动词开头。
8. 布尔型变量使用动词命名,例如:isLoading、hasError、canDelete等。
9. 使用完整的单词,避免缩写并确保拼写正确
    - 像API、URL等标准缩写除外。
    - 常见缩写除外:
        - 循环中的i、j。
        - 错误的err。
        - 上下文的ctx。
        - 中间件函数参数的req、res、next。

### 函数
1. 在本文语境中,函数的相关规则同样适用于方法。
2. **函数设计**
    - 编写简短且目的单一的函数,指令数少于20条。
    - 用动词加其他内容来命名函数
        - 如果返回布尔值,使用isX、hasX、canX等命名方式。
        - 如果不返回任何内容,使用executeX、saveX等命名方式。
3. **避免嵌套**
    - 通过提前检查并返回和提取为工具函数的方式避免代码块嵌套。
    - 使用高阶函数(map、filter、reduce等)避免函数嵌套
        - 对于简单函数(指令数少于3条),使用箭头函数。
        - 对于非简单函数,使用具名函数。
4. **参数与返回值**
    - 使用默认参数值,而非检查是否为null或undefined。
    - 使用RO - RO原则减少函数参数
        - 使用对象传递多个参数。
        - 使用对象返回结果。
        - 声明输入参数和输出的必要类型。
5. 保持单一抽象层次。

### 数据
1. 不要滥用原始类型,将数据封装在复合类型中。
2. 避免在函数中进行数据验证,使用具有内部验证功能的类。
3. **数据不变性**
    - 对于不变的数据,使用readonly。
    - 对于不变的字面量,使用as const。

### 类
1. 遵循SOLID原则。
2. 优先使用组合而非继承。
3. 声明接口来定义契约。
4. **类的设计**
    - 编写目的单一的小类。
    - 指令数少于200条。
    - 公共方法少于10个。
    - 属性少于10个。

### 异常
1. 使用异常处理意外错误。
2. 捕获异常的目的
    - 解决预期问题。
    - 添加上下文信息。
    - 否则,使用全局处理程序。

### 测试
1. 测试遵循“安排 - 行动 - 断言”约定。
2. **变量命名**
    - 清晰命名测试变量。
    - 遵循以下约定:inputX、mockX、actualX、expectedX等。
3. **测试编写**
    - 为每个公共函数编写单元测试,使用测试替身模拟依赖(执行成本不高的第三方依赖除外)。
    - 为每个模块编写验收测试,遵循“给定 - 当 - 则”约定。

## NestJS特定规范
### 基本原则
1. **模块化架构**
    - 将API封装在模块中,每个主要领域/路由一个模块。
    - 每个路由一个控制器,次要路由使用其他控制器。
    - 一个包含数据类型的models文件夹
        - 输入使用class - validator验证的DTO。
        - 输出声明简单类型。
    - 一个包含业务逻辑和持久化的services模块
        - 使用MikroORM进行数据持久化的实体。
        - 每个实体一个服务。
    - 一个用于Nest框架相关组件的核心模块
        - 用于异常处理的全局过滤器。
        - 用于请求管理的全局中间件。
        - 用于权限管理的守卫。
        - 用于请求管理的拦截器。
    - 一个用于模块间共享服务的共享模块
        - 工具类。
        - 共享业务逻辑。

### 测试
1. 使用标准的Jest框架进行测试。
2. **测试覆盖**
    - 为每个控制器和服务编写测试。
    - 为每个API模块编写端到端测试。
3. 为每个控制器添加admin/test方法作为冒烟测试。 
javascript
jest
nestjs
solidjs
typescript

First Time Repository

TypeScript

Languages:

JavaScript: 1.8KB
TypeScript: 54.6KB
Created: 1/17/2025
Updated: 1/18/2025

All Repositories (1)