baidu-maps/harmony-sdk-skills/harmony-arkts-dev-assistant
Claude Code and agent skill by baidu-maps/harmony-sdk-skills
- community
Checking that the SKILL.md file is still in the repository.
HarmonyOS ArkTS 综合开发与类型安全最佳实践助手。用于在生成或重构 ArkTS/ArkUI 代码时统一组件装饰器、生命周期、样式布局、事件处理、类型与空值安全、性能优化与错误处理等规范,帮助通过 ArkTSCheck,提升代码一致性与可维护性。
Install
npx vskill@latest install baidu-maps/harmony-sdk-skills/harmony-arkts-dev-assistantSKILL.md
HarmonyOS ArkTS 开发规范编程助手 Skill
触发场景
当满足以下任意条件时,应启用本 Skill 作为 ArkTS 代码生成与审查的规范依据:
- 用户正在编辑或新建
.ets文件,并提到“规范”“最佳实践”“代码风格”“代码审查”等关键词。 - 对话中出现 ArkTS / ArkUI / HarmonyOS NEXT 相关问题,特别是组件写法、生命周期、样式布局、事件处理、状态管理、错误处理与测试实践。
- 用户要求“按照官方/行业最佳实践写 ArkTS 代码”或“帮我按规范检查/重构 ArkTS 页面/组件/模块”。
在这些场景下,代理生成或修改的 ArkTS 代码必须参考本 Skill 中的规范内容。
Skill 主目标
- 统一状态管理版本:统一工程中的状态管理,优先使用V2版本实现ViewModel。常用的状态管理装饰器包括@Local、@Param、@Event、@ObservedV2、@Trace等等。
- 统一组件装饰器与状态管理用法:确保入口组件、页面组件、自定义组件使用正确装饰器,
@State/@Prop/@Link/@Provide/@Consume等按数据流语义选用。 - 规范生命周期使用:在
aboutToAppear/aboutToDisappear/onPageShow/onPageHide中正确初始化与清理资源,避免内存泄漏。 - 统一样式与布局风格:使用链式调用、合理属性顺序与响应式单位(
vp/fp/ 百分比)构建 UI,保持 ArkUI 风格一致。 - 约束事件处理方式:使用箭头函数与私有方法封装复杂逻辑,避免在
build()中直接堆叠复杂业务代码。 - 强化类型安全:通过接口与泛型明确组件间数据结构、回调签名,避免隐式
anyunknown与弱类型代码。 - 关注性能与资源管理:避免不必要渲染,合理使用
@Reusable、@Builder、LazyForEach,并在生命周期正确释放资源。 - 规范错误处理与日志:为异步流程补充
try/catch与Promise.catch,使用hilog标准化日志输出。 - 强调测试与代码自检:引导为组件编写
@ohos/hypium单元测试,并使用附带的代码审查清单进行提交前自查。
Skill 使用要求与输出风格
在使用本 Skill 回答 ArkTS 相关问题或生成代码时,代理应:
- 对照规范自动修正代码
- 若发现组件缺少或误用装饰器(如
@Entry、@Component、@State等),应按照规范自动补全或更正。 - 若生命周期中存在资源泄漏风险(如定时器未清理),应在
aboutToDisappear()中补充清理逻辑。 - 若样式链式调用顺序混乱或混搭不同类别属性,应按“尺寸 → 布局 → 背景 → 边框 → 文本 → 对齐 → 交互”的顺序重排。
- 优先输出符合规范的示例代码
- 在讲解组件设计、状态管理、列表渲染、事件处理等场景时,示例代码必须遵循本 Skill 约定的写法。
- 对用户给出的“不规范示例”,先指出与本规范不符的点,再给出“✅ 推荐写法”。
- 显式引用相关章节指导
- 在回答中可提及“参考本 Skill 的 组件装饰器规范 / 生命周期规范 / 样式和布局规范 / 事件处理规范 / 类型安全规范 / 性能优化规范 / 错误处理规范 / 测试规范 章节”。
- 在代码审查类回答中,可根据文末“代码审查清单”逐项给出建议。
- 保持解释适度、以实践为导向
- 回答时以“如何写出正确 ArkTS 代码”为核心,适当引用规范要点,但避免长篇理论堆砌。
- 对关键规范(如生命周期清理、状态装饰器选择、错误处理等)给出简要原因解释,帮助用户理解而非死记。
⚠️ 强制要求(必须严格遵守)
在使用本 Skill 进行开发时,必须严格遵守以下规范:
- 构建与编译验证规范(Auto Run):
- ✅ 当涉及 ArkTS 语法结构调整(包括但不限于组件装饰器、生命周期函数签名、状态管理装饰器、接口/类型声明等)或 依赖相关改动(如
oh-package.json5、module.json5、三方 SDK 引入或移除)时,完成主要修改后应触发一次自动化“auto run”构建流程,而不是只在少数节点手动编译。 - ✅ 推荐在工程根目录配置脚本、IDE Task 或 CI 流水线,使每次提交前自动执行:
ohpm installhvigorw assembleHap --mode module -p product=default -p buildMode=debug --no-daemon
确保 ArkTSCheck 与打包流程均能通过。
- ✅ 在连续多轮 ArkTS 重构或大规模重命名后,应在合适的里程碑节点手动或自动重复执行上述 auto run 流程,以尽早暴露类型 / 语法 / 依赖问题。
- ❌ 禁止仅依赖本地 Lint 或静态分析结果,而在存在 ArkTS 语法或依赖改动时跳过 hvigor 真机 / 模拟器编译验证或约定的 auto run 流程。
- 日志输出规范:
- ✅ 必须使用
Logger工具类封装原生console - ✅ 第一个参数必须固定使用场景名
"SportHealthMap" - ✅ 第二个参数统一使用
string | object,推荐直接传入对象,由Logger负责 JSON 序列化 - ✅
Logger工具类会自动对非字符串参数执行JSON.stringify序列化 - ❌ 禁止直接使用
console.info/error/warn/debug - 示例(推荐用法):
Logger.info('SportHealthMap', JSON.stringify({ action: 'mapReady' }))
- 代码注释规范:
- ✅ 必须为关键方法添加注释,说明用途、参数、返回值
- ❌ 禁止无意义的注释
- 模块化规范:
- ✅ 必须将通用工具类、组件、同类Interface等类型定义独立为文件
- ❌ 禁止在页面组件内联定义通用类
- 性能优化规范:
5.1 对象缓存与复用
- ✅ 必须高频 UI 更新场景必须缓存复用对象,通过成员变量持有引用而非每次重建
- ✅ 必须重型对象(自定义绘制组件、动画控制器、数据适配器等)采用对象池(Object Pool)模式管理,预分配并按需取用归还
- ❌ 禁止同一功能重复创建对象、移除对象(如在定时回调 / 数据刷新中反复 new 再 remove)
- ❌ 禁止在
build()方法或@Builder函数内 new 任何非轻量值对象
5.2 渲染性能
- ✅ 必须列表场景超过 20 项时使用
LazyForEach+IDataSource实现按需加载,禁止一次性渲染全量数据 - ✅ 必须使用
@Builder抽取重复 UI 描述片段,避免build()内大量重复代码 - ✅ 推荐条件渲染优先使用
if/else控制组件树分支,而非通过.visibility(Visibility.None)隐藏(后者仍参与布局计算) - ❌ 禁止在
build()中执行耗时计算、网络请求或文件 I/O
5.3 状态管理精细化
- ✅ 必须将高频变化的状态与低频状态拆分到不同的
@State/@Observed属性中,避免无关属性变化引发整棵组件树重渲染 - ✅ 推荐使用
@Watch装饰器监听特定状态变化并执行副作用,替代在build()中做差异判断 - ✅ 推荐跨层级数据传递优先使用
@Provide/@Consume或 AppStorage,而非逐层@Prop透传 - ❌ 禁止将大型数组或深层嵌套对象整体赋值给
@State,应使用@Observed+@ObjectLink实现属性级精准刷新
5.4 异步与并发
- ✅ 必须耗时操作(网络请求、数据库查询、文件读写、大规模计算)放入
TaskPool或Worker线程执行,禁止阻塞 UI 线程 - ✅ 必须
TaskPool.execute()返回的 Promise 添加.catch()兜底,避免静默丢弃异常 - ✅ 推荐批量并发请求使用
Promise.all()/Promise.allSettled()合并,减少线程调度开销 - ❌ 禁止在定时器回调 (
setInterval/setTimeout) 中直接执行重型业务逻辑,应通过消息派发或 TaskPool 转移到后台
5.5 内存管理
- ✅ 必须在
aboutToDisappear()中清理所有定时器(clearInterval/clearTimeout)、事件订阅(emitter.off)、传感器监听、回调注册等 - ✅ 必须大图片 / Bitmap 资源使用完毕后显式调用
release()或置空引用,配合 GC 及时回收 - ✅ 推荐使用
WeakRef持有仅观察但不阻止回收的对象引用,避免闭包意外延长生命周期 - ❌ 禁止组件内持有对其他组件实例的强引用导致交叉引用无法回收
- ❌ 禁止在全局单例(AppStorage / 静态变量)中无限累积数据而不设置上限或淘汰策略
5.6 启动与加载优化
- ✅ 推荐非首屏模块使用动态
import()延迟加载,减少主包体积与冷启动耗时 - ✅ 推荐首屏数据预取与 UI 构建并行:在
aboutToAppear()发起请求的同时展示骨架屏 / Loading 占位 - ❌ 禁止在 Ability
onCreate()中执行阻塞性同步调用(如同步读取大文件、同步网络请求)
5.7 包体积与构建产物
- ✅ 推荐定期执行
hvigorw analyzeBundle分析包体积,识别并移除未使用的资源和依赖 - ✅ 推荐三方 SDK 按需引入子模块,避免全量导入(如
import { SpecificApi } from '@third/sdk'而非import * as sdk from '@third/sdk') - ❌ 禁止在发布构建中保留
console/hilog.debug级别日志输出,应通过构建配置或日志等级开关屏蔽
- 类型声明:
- ✅ 必须自定义的Object对象必须先通过Interface定义类型,然后引用类型定义数据,再使用
- ❌ 禁止使用
anyunknown类型标记 - 示例(推荐用法):
export interface Out{ xx: string} function getBaseLocation():Out{let m = {xx:'XXX'};return m}
代理在生成或审查 ArkTS 代码时应优先参考下面内容。
0. ArkTS 类型与空值安全规范
本节在原有“类型安全规范”基础上,补充 ArkTSCheck 相关的强制规则与空值安全约定,用于统一 ArkTS 代码的类型设计、空值处理和语法约束。
1. 类型安全强制规则
- 参数与返回值必须显式类型化:禁止隐式
anyunknown。所有函数、方法、回调的参数与返回值都要写明类型。 - 接口驱动的数据结构设计:对于组件
@State/@Prop/@Link、服务入参/出参、全局配置等,优先通过interface/ 类型别名定义结构,再在代码中引用。 - 禁止访问未声明字段:不允许通过字符串索引访问未在类型中声明的属性;确需“字典”结构时,使用索引签名:
2. 空值安全策略
- 显式处理 `null` / `undefined`:对类型为
T | null | undefined或带?:的可选属性,访问前必须通过可选链或显式判空。 - 推荐写法:
- 可选链:
user?.name、config?.options?.timeout ?? 3000; - 显式判空:
if (user !== null && user !== undefined) { ... }。 - 避免滥用非空断言 `!`:只有在前面已通过逻辑分支、早返回、抛错等方式完全覆盖空值分支时,才允许使用
!,并建议配合注释说明原因。
3. 函数声明与结构约束(ArkTSCheck 语法规则)
- 禁止解构变量声明:
ArkTS不支持const { a, b } = obj形式的解构变量声明(arkts-no-destruct-decls),必须改写为逐一赋值:
- 业务函数避免参数解构:推荐为参数定义接口或独立参数,而不是
function draw({ text, location }) { ... }这类难以追踪类型的写法。 - 组件内部优先使用箭头函数:在
build()中定义事件回调或内部小函数时,推荐const handler = (): void => { ... },有利于类型推断与闭包语义清晰。
4. ArkUI 组件属性约束补充
- `TextInput` 不支持 `placeholder` 属性:
TextInputAttribute中无placeholder,不能调用.placeholder()或通过构造参数设置占位符。 - 占位符需求推荐替代方案:
- 使用上方标签文本提示输入含义;
- 使用
Stack条件渲染一个灰色Text叠加在TextInput上,在输入内容为空时显示; - 如当前 HarmonyOS 版本支持,可使用
.placeholderFont()/.placeholderColor()等 API,而非自定义.placeholder()。
5. 类型系统约束与接口设计
- 避免依赖纯结构等价赋值:不要仅因为两个类字段“长得一样”就在它们之间互相赋值,应通过接口或基类统一约束:
- 在建模与重构时,优先:
- 定义领域接口 / 抽象基类;
- 让具体实现
implements/extends这些公共类型,而不是在不同类之间直接赋值。
6. 综合示例:类型安全 + 空值安全的路由跳转
在涉及路由表的场景中,必须为路由配置定义接口,并对 find 结果与可选 path 做空值处理:
在回答类似问题时,应通过上述模式同时保证:
- 所有参数 / 返回值有显式类型;
- 通过接口约束配置结构;
- 对可能为空的字段和查找结果做完备校验。
1. 组件装饰器规范
1.1 组件必须使用装饰器
- 入口组件必须使用
@Entry装饰器 - 页面组件必须使用
@Component装饰器 - 自定义组件必须使用
@Component装饰器
1.2 状态管理装饰器
根据数据流动方向选择合适的装饰器:
@State:组件内部的状态,变化会触发UI更新@Prop:从父组件传递到子组件的只读数据@Link:父子组件双向绑定的数据@Provide/@Consume:跨层级组件数据共享@Observed/@ObjectLink:对象属性级别的响应式更新@StorageProp/@StorageLink:持久化存储
2. 组件生命周期规范
2.1 生命周期装饰器
必须按照规范的顺序定义生命周期方法:
aboutToAppear():组件即将显示时调用aboutToDisappear():组件即将消失时调用onPageShow():页面显示时调用(仅Page组件)onPageHide():页面隐藏时调用(仅Page组件)
3. 样式和布局规范
3.1 链式调用
样式属性必须使用链式调用,按以下顺序组织:
- 尺寸属性:
.width(),.height(),.size() - 布局属性:
.margin(),.padding() - 背景属性:
.backgroundColor(),.backgroundImage() - 边框属性:
.borderRadius(),.borderWidth(),.borderColor() - 文本属性:
.fontSize(),.fontColor(),.fontWeight() - 对齐属性:
.justifyContent(),.alignItems() - 交互属性:
.onClick(),.onTouch()
3.2 响应式单位
- 优先使用百分比:
'100%'而不是固定值 - 推荐使用
vp(虚拟像素)适配不同分辨率 - 文本使用
fp(字体像素)保证字体大小一致性
4. 事件处理规范
4.1 事件回调函数
- 使用箭头函数避免this绑定的问题
- 复杂逻辑封装到私有方法中
- 避免在build方法中直接写复杂逻辑
5. 类型安全规范
5.1 接口定义
组件之间的数据传递必须定义明确的接口:
5.2 泛型使用
对于可复用的组件,使用泛型提高类型安全性:
6. 性能优化规范
6.1 对象缓存与复用
- 高频更新场景(如实时数据刷新、动画帧更新)必须缓存对象引用,仅更新属性而非销毁重建
- 使用对象池模式管理重型对象的分配与回收
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/harmony-arkts-dev-assistant/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/baidu-maps/harmony-sdk-skills/harmony-arkts-dev-assistant)