--- description: 前端应用的 TypeScript 编码标准和最佳实践 --- # TypeScript 最佳实践 ## 类型系统 - 对对象定义优先使用 interface 而非 type - 对联合类型、交叉类型和映射类型使用 type - 避免使用 `any`,对未知类型优先使用 `unknown` - 使用严格的 TypeScript 配置 - 利用 TypeScript 的内置工具类型 - 对可复用的类型模式使用泛型 ## 命名约定 - 对类型名称和接口使用 PascalCase - 对变量和函数使用 camelCase - 对常量使用 UPPER_CASE - 使用带辅助动词的描述性名称(例如 isLoading, hasError) - React props 的接口前缀使用 'Props'(例如 ButtonProps) ## 代码组织 - 将类型定义保持在使用位置附近 - 共享时从专用类型文件导出类型和接口 - 使用桶导出(index.ts)组织导出 - 将共享类型放在 `types` 目录中 - 将组件 props 与其组件放在一起 ## 函数 - 对公共函数使用显式返回类型 - 对回调和方法使用箭头函数 - 使用自定义错误类型实现适当的错误处理 - 对复杂类型场景使用函数重载 - 优先使用 async/await 而非 Promises ## 最佳实践 - 在 tsconfig.json 中启用严格模式 - 对不可变属性使用 readonly - 利用可辨识联合类型确保类型安全 - 使用类型守卫进行运行时类型检查 - 实现适当的 null 检查 - 除非必要,否则避免类型断言 ## 错误处理 - 为特定领域的错误创建自定义错误类型 - 对可能失败的操作使用 Result 类型 - 实现适当的错误边界 - 使用带类型的 catch 子句的 try-catch 块 - 正确处理 Promise 拒绝 ## 设计模式 - 对复杂对象创建使用建造者模式 - 对数据访问实现仓储模式 - 对对象创建使用工厂模式 - 利用依赖注入 - 使用模块模式进行封装 ## 类型安全 - 使用严格的 null 检查 - 避免使用类型断言(as),除非绝对必要 - 使用类型守卫函数进行运行时验证 - 利用 TypeScript 的控制流分析 - 使用 const 断言提高类型推断 ## 泛型使用 - 为可复用组件和函数使用泛型 - 为泛型参数使用有意义的名称 - 使用泛型约束限制类型参数 - 避免过度使用泛型导致代码复杂化 ## 导入和导出 - 使用命名导出而非默认导出 - 按逻辑分组组织导入语句 - 使用路径别名简化导入路径 - 避免循环依赖 ## 性能考虑 - 使用适当的类型推断减少类型注解 - 避免过度复杂的类型计算 - 使用类型缓存优化编译性能 - 合理使用类型断言避免性能损失