华为官方文档及OpenHarmony社区实践整理,涵盖ArkTS/TS代码风格、命名、注释、工程化检查等核心内容

📅 2026/7/14 5:38:29 👁️ 阅读次数 📝 编程学习
华为官方文档及OpenHarmony社区实践整理,涵盖ArkTS/TS代码风格、命名、注释、工程化检查等核心内容

一、通用原则

  1. 代码清晰优先:直白简单的逻辑比注释更有效。不要为了快速开发牺牲健壮性和可读性。

  2. 工具自动化:使用IDE自带格式化(Ctrl+Alt+L),保持空格、换行一致。

  3. 消灭魔鬼数字/字符串:所有业务含义的值(如状态码、银行代码)必须定义为常量:

    typescript

    // 不规范 if (transactionStatus == 1) { showMessage("交易成功"); } // 规范 const TRANSACTION_SUCCESS = 1; if (transactionStatus == TRANSACTION_SUCCESS) { showMessage("交易成功"); }
  4. 复用原则:代码复制三次以上,必须抽取为公共函数或组件。

  5. 分号规范:除build()函数外,所有语句必须以分号;结束。

二、命名规范

类型风格示例要求
类/接口/枚举/命名空间大驼峰 (UpperCamelCase)BankAccountManagerUserTypeBase64Utils类名是名词,避免DataInfo等模糊词;接口可用形容词+able
变量/方法/参数小驼峰 (lowerCamelCase)userNamecalculateInterest()isTransactionValid()方法名用动词/动词短语;布尔方法用is/has/can前缀
常量/枚举值全大写下划线 (CONSTANT_CASE)MAX_TRANSACTION_AMOUNT表达完整语义
文件命名.ets/.ts:大驼峰
.js:小驼峰
Index.etsEntryAbility.etsindex.js资源文件可用小驼峰或snake_case

关键禁忌:避免拼音、无意义缩写(如accaccount);禁止使用系统关键字(如onClickpadding)作为变量名;避免否定布尔变量(如isNoErrorisError)。

三、格式规范

  1. 缩进:只用空格,推荐2个空格缩进,禁用Tab键。

  2. 行宽:不超过120个字符。

  3. 大括号ifforwhile等语句即使只有一行也必须使用大括号。

    typescript

    // 不规范 if (condition) console.log('success'); // 规范 if (condition) { console.log('success'); }
  4. 空格规则

    • 关键字(if/for)与括号间加空格;函数名与括号间不加空格。

    • 二元操作符前后加空格;逗号后加空格。

    • else与前面}之间加空格。

  5. 变量声明:每行只声明一个变量,禁止let a=1, b=2;

四、注释规范

  1. 好代码自解释:不言自明的方法/变量不需要注释,不要翻译命名。

  2. 复杂逻辑必加:说明"为什么"而非"是什么"(如复利计算的特殊公式)。

  3. JSDoc/ArkTSDoc:使用/** */格式为类、函数、参数添加说明,配合IDE生成智能提示。

    typescript

    /** * 计算理财产品利息(复利方式,节假日不计息) * @param principal 本金 * @param dailyRate 日利率 * @returns 总利息 */ function calculateInterest(principal: number, dailyRate: number): number { ... }

五、代码结构限制

指标限制处理方式
函数行数≤80行超过则拆分多个子函数
嵌套深度≤4层使用提前返回(Guard Clauses)减少嵌套
重复代码3行×3次 或 5行×2次必须抽取复用

示例:减少嵌套(提前返回)

typescript

// 不规范:5层嵌套 function check(transaction) { if (transaction.isValid) { if (transaction.amount > 0) { if (transaction.targetAccount?.isActive) { return true; } } } return false; } // 规范:提前返回 function check(transaction) { if (!transaction.isValid) return false; if (transaction.amount <= 0) return false; if (!transaction.targetAccount?.isActive) return false; return true; }

六、Lint工具落地

"没有Lint的规范只是建议,有了Lint的规范才是规则。"

在项目中配置ESLint自动检查,核心配置项包括:

javascript

// .eslintrc.arkts.js 核心规则示例 module.exports = { parser: '@typescript-eslint/parser', extends: ['@typescript-eslint/recommended'], rules: { 'indent': ['error', 2], // 2空格缩进 'semi': ['error', 'always'], // 必须分号 'max-len': ['warn', { code: 120 }], // 行宽120 'max-depth': ['warn', { max: 4 }], // 嵌套≤4层 'complexity': ['warn', { max: 15 }], // 圈复杂度≤15 '@typescript-eslint/no-explicit-any': 'error', // 禁用any '@typescript-eslint/prefer-optional-chain': 'error', // 使用可选链 }, };

具体配置可参考@hw-stylistic规则集,以及@typescript-eslint推荐配置。

七、异常处理规范

场景规范示例
API参考示例不加异常处理,保持简洁直接调用API,不添加.catch()try-catch
开发指南/实际应用必须加异常处理使用try-catch捕获同步异常,.catch()捕获Promise异常,并导入BusinessError获取错误码

开发指南示例

typescript

import { BusinessError } from '@kit.BasicServicesKit'; // 异步场景 doSthAsync().catch((err: BusinessError) => { console.error(`Failed. Code: ${err.code}, message: ${err.message}`); }); // 同步场景 try { doSthSync(); } catch (error) { const err: BusinessError = error as BusinessError; console.error(`Failed. Code: ${err.code}`); }

八、补充要点

  1. UI组件属性:宽高、字号等数字属性不加单位(vp/fp/px),系统自动处理:.width(100)而非.width('100vp')

  2. 导入别名:依赖包的别名应与包名空间一致,避免自定义缩写。

  3. 参考来源:官方完整规范见[OpenHarmony ArkTS编程规范]、[示例代码风格指南]以及[各语言编程规范]。