feat: add China Telecom R&D project template

This commit is contained in:
v6ole
2026-07-28 22:30:20 +08:00
commit b6a1fd85d8
51 changed files with 11196 additions and 0 deletions
@@ -0,0 +1,131 @@
# 03-前端编码规范
## 1. HTML
### 文档结构
- **【强制】** 使用 HTML5 DOCTYPE
- **【推荐】** 指定 `<html lang="...">`
- **【推荐】** 使用 UTF-8 编码(`<meta charset="utf-8" />`
- **【推荐】** 移动端设置 viewport
### 资源加载
- **【推荐】** CSS 在 `<head>` 引入,JS 在 `</body>` 前引入
- **【推荐】** 引入 CSS/JS 无需指定 type
### 页面标题
- **【强制】** 必须有且仅有 1 个 `<title>`
### 编码风格
- **【推荐】** 2 个空格缩进
- **【强制】** HTML 注释中不允许出现任何敏感信息
- **【强制】** 标签名统一小写
- **【推荐】** 自闭合标签结尾加斜线
### 属性
- **【强制】** 属性值用双引号
- **【推荐】** Boolean 属性不添加取值
- **【推荐】** 自定义属性以 `data-` 为前缀
---
## 2. CSS
### 文件引用
- **【强制】** 一律使用 `<link>` 引入外部样式
- **【推荐】** 不要在 `<style>` 块中使用 `@import`
### 命名
- **【强制】** 由字母、中划线、数字组成,不能以数字或中划线开头
- **【强制】** 禁止拼音与英文混合,禁止中文
- **【参考】** 不依据表现形式命名,依据内容/功能命名
- **【强制】** 缩写后仍能保持原单词意思
### 编码风格
- **【强制】** 所有声明以分号结尾
- **【推荐】** 2 个空格缩进
- **【推荐】** 选择器和 `{` 之间保留一个空格
- **【推荐】** `:` 和属性值之间保留一个空格
- **【推荐】** 单行不超过 100 字符
### 属性
- **【参考】** 不要使用 id 选择器
- **【推荐】** 不使用 `!important`
- **【推荐】** 十六进制统一小写
- **【推荐】** 属性声明顺序:定位 → 盒模型 → 文字排版 → 外观 → 其他
---
## 3. JavaScript
### 变量
- **【强制】** 使用 `const``let`,禁止 `var`
### 字符串
- **【强制】** 使用单引号或反引号
- **【推荐】** 模板字符串代替拼接
### 比较
- **【强制】** `===``!==` 代替 `==``!=`
### 函数
- **【强制】** 不要定义 `arguments` 参数
- **【强制】** 不要用 `Function` 构造函数
- **【强制】** 不要在块中声明函数
- **【强制】** 不使用 `arguments` 对象,用 `...` 替代
- **【推荐】** 使用默认参数语法
- **【参考】** 圈复杂度 ≤ 10,认知复杂度 ≤ 15
### 数组/对象
- **【推荐】** 字面语法创建
- **【强制】** `map/filter/reduce` 等回调必须有 return
- **【推荐】** 使用 `...` 展开运算符
### 模块
- **【推荐】** 使用 ES6 modules
- **【强制】** 禁止重复 import 同一模块
- **【强制】** import 放到模块最上方
- **【强制】** 禁止 default import 与其他 export 同名,禁止自引用、循环引用
### 代码风格
- **【强制】** 2 个空格缩进
- **【推荐】** 添加尾随分号
- **【推荐】** 文件最大行数 1000,函数最大行数 80
- **【推荐】** 单行最大字符数 100
### 命名
- **【强制】** 避免单字母名
- **【参考】** 变量/函数用小驼峰(camelCase),类用大驼峰(PascalCase
---
## 4. TypeScript
### 类型声明
- **【强制】** interface/type 中成员分隔符统一用分号
- **【强制】** 类型声明时冒号前无空格、冒号后一个空格,箭头前后各一个空格
- **【强制】** 优先使用 `Interface` 而非 `type`
- **【强制】** interface 和 type 定义时必须声明成员类型
- **【推荐】** 简单数组用 `T[]`,复杂类型用 `Array<T>`
- **【强制】** 禁止无意义的 void 类型
### 类
- **【参考】** 为类成员声明可访问类型(public/private/protected
- **【推荐】** 字面量属性用 `readonly` 而非 getter
### 变量
- **【强制】** 不得使用 `var`
- **【推荐】** 优先用 `const`,必要时用 `let`
- **【推荐】** 如非必要不使用 `any`
- **【参考】** 优先使用 `undefined`,避免 `null`
### 断言
- **【强制】** 类型断言使用 `as Type` 语法
### 枚举
- **【参考】** 使用联合类型替代枚举,避免在新代码中使用枚举
### 其他
- **【强制】** 禁止使用三斜杠 `///` 导入
- **【强制】** 禁止使用 `namespace`
- **【强制】** 重载函数写在一起
- **【强制】** 即使是单行语句,if/else/for/while 不得省略大括号