Skip to content

命名规范

本规范适用于所有项目的标识符命名,涵盖文件、变量、常量、函数、类、组件、类型、接口等。语言/框架有强制约定时(如环境变量、特定文件名),优先遵循其约定。


所有命名遵循三级体系,按标识符的单词数量和语义角色选择对应格式:

类别格式示例
单一单词(文件/文件夹/模块名)全小写utils、types、index
多单词函数/方法/变量小驼峰 camelCasegetPackageInfo、handleClick
多单词类/组件/类型/接口大驼峰 PascalCaseUserProfile、ApiResponse
  • 文件、文件夹、模块、包名等单一单词标识符统一使用全小写
  • 示例:utils/、types/、index.ts、auth.ts
  • 函数、方法、变量:camelCase
  • 类、组件、类型、接口、枚举:PascalCase
  • 常量:UPPER_SNAKE_CASE

文件类型格式示例
单一单词目录/模块全小写utils/、types/、index.ts
多单词非组件文件kebab-casedate-utils.ts、http-request.ts
组件文件(Vue/React)PascalCaseUserList.vue、OrderDetail.vue
类型文件kebab-caseuser-types.ts、order-types.ts
Store 文件kebab-caseuser-store.ts、cart-store.ts
组合式函数文件kebab-caseuse-user-list.ts
样式文件kebab-caseuser-card.scss
  • 禁止使用空格、中文、特殊字符作为文件名
  • 禁止文件名与目录名同名(如 user/user.ts)
  • 目录名必须为有意义的名词,禁止使用 temp、test1 等无意义名称

  • 使用 camelCase
  • 示例:
const userName = 'Alice'
const itemCount = 42
const isActive = true
  • 必须使用 is、has、should、can 等前缀
  • 示例:
const isLoading = true
const hasPermission = false
const shouldUpdate = true
const canEdit = false
  • 数组、Map、Set 等使用复数形式
  • 示例:
const users: User[] = []
const userIdMap = new Map<number, User>()
const activeIdSet = new Set<string>()

  • 使用 UPPER_SNAKE_CASE
  • 示例:
const MAX_RETRY_COUNT = 3
const DEFAULT_PAGE_SIZE = 10
const API_BASE_URL = 'https://api.example.com'
  • 使用 PascalCase 或 UPPER_SNAKE_CASE,项目内统一
  • 示例:
enum OrderStatus {
Pending = 'pending',
Processing = 'processing',
Completed = 'completed'
}

  • 使用 camelCase
  • 以动词或动词短语开头
  • 推荐动词前缀:
前缀含义示例
get / fetch获取数据getUserInfo、fetchUserList
set / update设置/更新setUserName、updateProfile
create / add创建/添加createOrder、addItem
delete / remove删除/移除deleteUser、removeItem
handle事件处理handleSubmit、handleCancel
validate / check校验/检查validateForm、checkPermission
format / parse格式化/解析formatDate、parseJson
compute / calculate计算computeTotal、calculateAge
  • 使用 handle 或 on 前缀
  • handle 用于方法内部定义的处理函数
  • on 用于回调属性名(props 中的事件回调)
  • 示例:
const handleSubmit = () => {}
const handleCancel = () => {}
// 回调属性
interface Props {
onClick?: () => void
onChange?: (value: string) => void
}
  • 无额外命名要求,遵循一般函数规则
  • 返回 Promise 的函数名无需加 Async 后缀

  • 使用 PascalCase
  • 使用名词或名词短语
  • 示例:
class UserService {}
class OrderController {}
class PaymentGateway {}
  • 使用 PascalCase
  • 必须由多个单词组成,避免与 HTML 原生元素冲突
  • 示例:
// 正确
export default defineComponent({
name: 'UserList'
})
// 错误
export default defineComponent({
name: 'List' // 过于简单,可能冲突
})
// 错误
export default defineComponent({
name: 'userList' // 应使用 PascalCase
})
  • 使用 camelCase,以 use 开头
  • 示例:useUserList、useFormValidation、useDarkMode
  • Store ID 使用 camelCase
  • Store 函数使用 use 前缀 + PascalCase store 名
  • 示例:useUserStore、useCartStore、useAppStore

  • 使用 PascalCase
  • 使用名词或名词短语
  • 可选 I 前缀(项目内统一选择一种)
  • 示例:
interface User {
id: number
name: string
}
// 或使用 I 前缀
interface IUser {
id: number
name: string
}
  • 使用 PascalCase
  • 联合类型、交叉类型等复杂类型推荐使用 Type 后缀
  • 示例:
type UserStatus = 'active' | 'inactive' | 'banned'
type ApiResponse<T> = { code: number; data: T }
type SortDirectionType = 'asc' | 'desc'
类型用途后缀示例
组件 PropsPropsUserCardProps、SearchBarProps
组件 EmitsEmitsUserFormEmits、ModalEmits
数据传输对象DTOUserCreateDTO、OrderUpdateDTO
视图对象VOUserDetailVO、OrderSummaryVO
请求参数Query / ParamsUserQuery、SearchParams
响应类型Response / ResultUserListResponse、LoginResult
  • 单字母大写推荐:T、K、V
  • 有明确语义时使用描述性名称:TData、TItem
  • 示例:
type ApiResponse<TData> = { code: number; data: TData }
type Nullable<T> = T | null

  • 使用 BEM 命名规范
  • Block(块)__ Element(元素)-- Modifier(修饰符)
  • Block 和 Element 使用 kebab-case
  • 示例:
.user-card {}
.user-card__header {}
.user-card__title {}
.user-card__content {}
.user-card--active {}
.user-card--disabled {}
  • 禁止使用 ID 选择器做样式
  • 禁止使用驼峰命名 CSS 类
  • 公共工具类使用单连字符前缀(如 is-、has-)

  • 使用 UPPER_SNAKE_CASE
  • 框架前缀 + 描述
  • 示例:
VITE_API_BASE_URL=https://api.example.com
VITE_APP_TITLE=My App
NEXT_PUBLIC_GA_ID=UA-123456

  • 禁止使用拼音命名
  • 禁止使用无意义缩写(btn 除外,act、cnt、usr 等禁止)
  • 禁止使用单字母变量(for 循环的 i、j、k 除外)
  • 禁止使用 temp、data、info 等无信息量的名称
  • 禁止在同一作用域使用仅大小写不同的两个标识符
  • 禁止使用 _ 开头或结尾命名(框架约定除外,如 _props、_internal)
  • 禁止使用保留字作为标识符