Files
2026-09-15 15:25:05 +07:00

2.8 KiB
Raw Permalink Blame History

命名规范(Vue3 + TypeScript

本规范参考 Vue 官方风格与 TypeScript 主流实践,目标是统一可读性、可检索性、可维护性。

0) 历史代码兼容原则

  • 存量代码可暂时保留历史命名,不做一次性全量改名。
  • 增量从严:新增文件、目录、类型、变量、函数、组件命名必须符合本规范。
  • 改动旧文件时,至少保证“新增/修改行”不引入旧命名反模式。
  • 大范围改名需单独评估风险(路由、动态导入、缓存键、埋点字段),建议独立 PR 分批执行。

1) 目录与文件命名

  • 目录名:kebab-case
    • 示例:src/views/user-center/
  • 页面入口文件:index.vue
  • 组件文件:PascalCase.vue
    • 示例:UserProfileCard.vue
  • hooks/composable 文件:useXxx.ts
    • 示例:useMediaEpisodePaging.ts
  • 其他 TS 文件:kebab-case.ts
    • 示例:media-content-parser.ts
  • 样式文件:kebab-case.scss

2) 代码符号命名

  • class/type/interface/enumPascalCase
    • 示例:UserProfileServiceMediaListItemApiError
  • 变量/函数/方法:camelCase
    • 示例:fetchMediaListbuildRequestParams
  • 常量:UPPER_SNAKE_CASE
    • 示例:DEFAULT_PAGE_SIZE
  • 布尔变量:is/has/can/should + PascalCase
    • 示例:isLoadinghasPermission
  • Promise 异步动作:动词开头
    • 示例:fetchUserInfoloadEpisodeList

3) Vue 约定命名

  • 事件处理函数统一 handleXxx
    • 示例:handleSubmithandleEpisodeChange
  • 事件命名(emit)使用 kebab-case
    • 示例:episode-changesubmit-success
  • props 命名在代码中使用 camelCase,模板中可使用 kebab-case
  • 计算属性命名以业务语义为主,避免 data1tempVal 这类占位名。

4) 类型命名细则

  • DTO/接口模型建议加语义后缀:
    • 入参:XxxParams
    • 返回:XxxRespXxxResponse
    • 列表项:XxxItem
  • 错误类型建议统一:XxxError
  • 避免使用 IUser 这类 I 前缀接口命名。

5) 禁止项

  • 禁止拼音命名(业务专有词且已有共识除外)。
  • 禁止无语义缩写(如 tmp, obj2, aaa)。
  • 禁止单字符业务变量命名(循环计数器 i/j/k 除外)。
  • 禁止同一模块混用多种命名风格。

6) 快速示例

// good
const DEFAULT_RETRY_COUNT = 2;

interface QueryMediaListParams {
  pageNumber: number;
  pageSize: number;
}

async function fetchMediaList(params: QueryMediaListParams) {
  // ...
}

const isListEmpty = computed(() => state.list.length === 0);
// bad
const retryCountDefault = 2; // 常量未使用 UPPER_SNAKE_CASE
interface IQuery {} // 不建议 I 前缀
async function getdata(d: any) {} // 命名与类型均不规范
const temp = computed(() => state.list.length === 0); // 语义弱