SuperAPI AI 工具集

arkts-syntax-assistant

编程与开发

查看项目

更新于 10-15 15:43

技能介绍

用途

ArkTS 语法助手用于辅助 HarmonyOS/OpenHarmony 应用开发,围绕 ArkTS 语言提供语法、迁移与优化方面的指导。ArkTS 是 OpenHarmony 应用的默认开发语言,在 TypeScript 基础上增强了静态类型,以提升程序稳定性与性能。该技能在以下情况触发:.ets 文件、ArkTS 关键字、HarmonyOS/OpenHarmony 上下文等。

主要能力

ArkTS 的核心特性包括:

  • 静态类型:所有类型在编译期确定,减少运行时检查。
  • 无动态对象布局:对象结构在编译期固定,运行时不可修改。
  • 受限运算符:部分运算符行为受限,以鼓励更清晰的代码语义。
  • 不支持结构化类型:当前不支持结构化类型(structural typing)。

技能覆盖四类工作流:

  1. 语法问题:识别问题类型,查阅文档,提供代码示例。常见语法问题涉及变量声明(使用 let/const 并显式类型或推断)、函数定义(支持可选参数、默认值、剩余参数、箭头函数)、类与接口(字段必须初始化,支持继承与实现)、泛型(支持约束与默认值)、空安全(可空类型 (T | null)、非空断言 (!)、可选链 (?.))。
  2. TypeScript 迁移:识别 TS 代码,检查不兼容特性,查阅迁移规则,提供 ArkTS 替代方案。
  3. 性能优化:分析代码,识别性能问题,查阅优化指南,提供解决方案。
  4. 编译错误解决:获取错误信息,搜索迁移规则,查找相关案例,提供修复方案。

使用方式

技能提供参考文档,按场景查阅:

  • 语法学习:references/en/introduction-to-arkts.md
  • 快速概览:references/en/arkts-get-started.md
  • TS 迁移:references/en/typescript-to-arkts-migration-guide.md
  • 迁移背景:references/en/arkts-migration-background.md
  • 性能:references/en/arkts-high-performance-programming.md
  • 更多案例:references/en/arkts-more-cases.md

回答指南要求:优先给出代码示例,展示正确与错误语法对比;引用官方文档,引导用户查阅 references/ 下对应文档;解释原因,说明 ArkTS 为何有此限制(性能、稳定性);提供替代方案,对不支持的特性给出可行替代。

TypeScript 迁移规则速查

  • var x → let x
  • any/unknown → 具体类型
  • {n: 42} 对象字面量 → 先定义类/接口
  • [index: T]: U 索引签名 → Record<T, U>
  • A & B 交叉类型 → interface C extends A, B
  • function(){} 函数表达式 → () => {} 箭头函数
  • <Type>value 类型断言 → value as Type
  • 解构 [a, b] = arr → 单独访问 arr[0], arr[1]
  • for..in → for 循环或 for..of
  • 构造函数参数属性 → 显式字段声明

高性能编程要点

  • 声明:不变量使用 const;避免整数与浮点数混用。
  • 循环:提取循环不变量;避免数值溢出。
  • 函数:优先参数传递而非闭包;避免可选参数。
  • 数组:数值使用 TypedArray;避免稀疏数组和联合类型数组。
  • 异常:避免在循环中抛出;改用返回值。

常见问题示例

JSON.parse 返回值处理:

// 错误
let data = JSON.parse(str);

// 正确
let data: Record<string, Object> = JSON.parse(str);

定义对象类型:

// TypeScript 语法(ArkTS 不支持)
type Person = { name: string, age: number }

// ArkTS 语法
interface Person {
  name: string;
  age: number;
}

// 使用对象字面量
let p: Person = { name: 'John', age: 25 };

替换 globalThis:

// 错误
globalThis.value = 'xxx';

// 使用单例模式
export class GlobalContext {
  private constructor() {}
  private static instance: GlobalContext;
  private _objects = new Map<string, Object>();

  public static getContext(): GlobalContext {
    if (!GlobalContext.instance) {
      GlobalContext.instance = new GlobalContext();
    }
    return GlobalContext.instance;
  }

  getObject(key: string): Object | undefined {
    return this._objects.get(key);
  }

  setObject(key: string, value: Object): void {
    this._objects.set(key, value);
  }
}

catch 中错误类型处理:

// 错误
try {} catch (e: BusinessError) {}

// 正确
try {} catch (error) {
  let e: BusinessError = error as BusinessError;
}

使用 Record 类型:

// TypeScript 索引签名
function foo(data: { [key: string]: string }) {}

// ArkTS Record
function foo(data: Record<string, string>) {}

// 使用示例
let map: Record<string, number> = {
  'John': 25,
  'Mary': 21,
};

用工厂函数替换构造函数签名:

// TypeScript 构造函数签名
type ControllerCtor = {
  new (value: string): Controller;
}

// ArkTS 工厂函数
type ControllerFactory = () => Controller;

class Menu {
  createController: ControllerFactory = () => {
    return new Controller('default');
  }
}

禁用的标准库 API

ArkTS 中禁用以下 API:

  • Global:eval
  • Object:proto、defineProperty、freeze、getPrototypeOf 等
  • Reflect:apply、construct、defineProperty 等
  • Proxy:所有 handler 方法

构建脚本

scripts 目录提供 ArkTS 项目的快速编译脚本(含依赖安装):

  • macOS/Linux:scripts/run.sh,执行 ohpm install + hvigorw assembleApp
  • Windows:scripts/run.ps1,执行 ohpm install + hvigorw assembleApp

使用方式:

# macOS/Linux
bash scripts/run.sh

# Windows PowerShell
.\scripts\run.ps1

脚本执行步骤:安装依赖(ohpm install --all)、构建项目(hvigorw assembleApp)。

强制要求

当该技能生成 ArkTS 代码时,必须遵循以下工作流:

  1. 编译验证:生成代码后,必须使用构建脚本编译项目(macOS/Linux 用 bash scripts/run.sh,Windows 用 .\scripts\run.ps1)。
  2. 重试策略:若编译失败,分析错误输出,修复问题并重试编译,最多 3 次。
  3. 用户介入:3 次编译失败后,使用 AskUserQuestion 询问:编译在 3 次尝试后失败,希望如何继续?选项包括继续重试、手动介入、跳过编译。
  4. 错误报告:失败时始终显示完整的编译错误输出。

适用场景与限制

适用于 HarmonyOS/OpenHarmony 应用开发中的 ArkTS 语法查询、TypeScript 代码迁移、性能优化和编译错误排查。限制方面:ArkTS 不支持结构化类型、动态对象布局,部分运算符行为受限,且禁用若干标准库 API(如 eval、Proxy、Reflect 等)。技能本身采用 MIT 许可证,详见 LICENSE.txt。