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

📅 2026/7/14 5:19:35
华为官方文档及OpenHarmony社区实践整理,涵盖ArkTS/TS代码风格、命名、注释、工程化检查等核心内容
一、通用原则代码清晰优先直白简单的逻辑比注释更有效。不要为了快速开发牺牲健壮性和可读性。工具自动化使用IDE自带格式化CtrlAltL保持空格、换行一致。消灭魔鬼数字/字符串所有业务含义的值如状态码、银行代码必须定义为常量typescript// 不规范 if (transactionStatus 1) { showMessage(交易成功); } // 规范 const TRANSACTION_SUCCESS 1; if (transactionStatus TRANSACTION_SUCCESS) { showMessage(交易成功); }复用原则代码复制三次以上必须抽取为公共函数或组件。分号规范除build()函数外所有语句必须以分号;结束。二、命名规范类型风格示例要求类/接口/枚举/命名空间大驼峰 (UpperCamelCase)BankAccountManager、UserType、Base64Utils类名是名词避免Data、Info等模糊词接口可用形容词able变量/方法/参数小驼峰 (lowerCamelCase)userName、calculateInterest()、isTransactionValid()方法名用动词/动词短语布尔方法用is/has/can前缀常量/枚举值全大写下划线 (CONSTANT_CASE)MAX_TRANSACTION_AMOUNT表达完整语义文件命名.ets/.ts大驼峰.js小驼峰Index.ets、EntryAbility.ets、index.js资源文件可用小驼峰或snake_case关键禁忌避免拼音、无意义缩写如acc→account禁止使用系统关键字如onClick、padding作为变量名避免否定布尔变量如isNoError→isError。三、格式规范缩进只用空格推荐2个空格缩进禁用Tab键。行宽不超过120个字符。大括号if、for、while等语句即使只有一行也必须使用大括号。typescript// 不规范 if (condition) console.log(success); // 规范 if (condition) { console.log(success); }空格规则关键字if/for与括号间加空格函数名与括号间不加空格。二元操作符前后加空格逗号后加空格。else与前面}之间加空格。变量声明每行只声明一个变量禁止let a1, b2;。四、注释规范好代码自解释不言自明的方法/变量不需要注释不要翻译命名。复杂逻辑必加说明为什么而非是什么如复利计算的特殊公式。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获取错误码开发指南示例typescriptimport { 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}); }八、补充要点UI组件属性宽高、字号等数字属性不加单位vp/fp/px系统自动处理.width(100)而非.width(100vp)。导入别名依赖包的别名应与包名空间一致避免自定义缩写。参考来源官方完整规范见[OpenHarmony ArkTS编程规范]、[示例代码风格指南]以及[各语言编程规范]。