首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >鸿蒙应用开发之旅:初识ArkTS开发语言

鸿蒙应用开发之旅:初识ArkTS开发语言

原创
作者头像
Quarkn
发布2025-08-02 11:13:53
发布2025-08-02 11:13:53
28900
代码可运行
举报
运行总次数:0
代码可运行

ArkTS 是鸿蒙生态的应用开发语言

认识 ArkTS

ArkTS 是 HarmonyOS 应用开发的官方高级语言。ArkTS 在 TypeScript(简称 TS)生态基础上做了进一步扩展,保持了 TS 的基本风格,同时通过规范定义强化开发期静态检查和分析,提升代码健壮性,并实现更好的程序执行稳定性和性能。ArkTS 同时也支持与 TS/JavaScript(简称 JS)高效互操作,兼容 JS/TS 生态。

  • ArkTS 基础类库和容器类库增强了语言的基础功能,提供包括高精度浮点运算、二进制 Buffer、XML 生成解析转换和多种容器库等能力,协助你简化开发工作,提升开发效率。
  • 针对 TS/JS 并发能力支持有限的问题,ArkTS 对并发编程 API 和能力进行了增强,提供了 TaskPool 和 Worker 两种并发 API 供你选择。另外,ArkTS 进一步提出了 Sendable 的概念来支持对象在并发实例间的引用传递,提升 ArkTS 对象在并发实例间的通信性能。
  • 方舟编译运行时(ArkCompiler)支持 ArkTS、TS、JS 的编译运行,目前它主要分为 ArkTS 编译工具链和 ArkTS 运行时两部分。其中 ArkTS 编译工具链负责在开发侧将高级语言编译为方舟字节码文件(*.abc),而 ArkTS 运行时则负责在设备侧运行字节码文件执行程序逻辑。
  • 未来,ArkTS 会结合应用开发/运行的需求持续演进,逐步提供并发能力增强、系统类型增强、分布式开发范式等更多特性。

ArkTS 设计理念

为更好地支持 HarmonyOS 应用的开发和运行,从 Harmony OS NEXT Developer Preview 0 版本开始,ArkTS 在 TS 的基础上,进一步通过规范强化静态检查和分析,这样做有两个好处:1.许多错误在编译时可以被检测出来,不用等到运行时,这大大降低了代码运行错误的风险,有利于程序的健壮性;2.减少运行时的类型检查,从而降低了运行时负载,有助于提升执行性能。

ArkTS 保留了 TS 大部分的语法特性,这可以帮助你更容易上手 ArkTS。同时,对于已有的标准 TS 代码,你仅需对少部分代码进行 ArkTS 语法适配,大部分代码可以直接复用。

ArkTS 支持与标准 JS/TS 的高效互操作,兼容 JS/TS 生态。HarmonyOS 也提供了标准 JS/TS 的执行环境支持,在“更注重已有生态直接复用”的场景下,你可以选择使用标准 JS/TS 进行代码复用或开发,更方便兼容现有生态。

ArkTS 相比 TS 特性差异

ArkTS 通过规范约束了 TS 中过于灵活而影响开发正确性或者给运行时带来不必要额外开销的特性,下面通过代码片段说明部分约束特性。

1.不支持在运行时更改对象布局

代码语言:javascript
代码运行次数:0
运行
复制
 // TypeScript代码片段
 class Point{
     public x: number
     public y: number
     constructor(x: number, y: number) {
     this.x =X
     this.y =y
     //case1
     let p1 = new Point(1.0, 1.0);
     delete p1.× // 在ArkTS中,编译时错误,不允许删除属性
     // case2
     let p2 = new Point(2.0, 2.0);
     P2.z = 2.0// 在ArkTS中,编译时错误,不允许添加属性
     / case3
     let p3 = new Point(3.0, 3.0);
     p3.x ='Hello!' // 在ArkTS中,编译时错误,不允许赋值其他类型
 }

以下TS 代码片段展示了如何在运行时通过添加和删除某些属性来更改对象的布局。运行时支持此类特性需要大量的性能开销,ArkTS 不支持在运行时更改对象的布局。

在 ArkTS 中,可以使用可选属性和给该属性赋值 undefined 的方式来替代。

2.对象字面量须标注类型

  • 以下 TS 代码片段展示了没有类型的场景。如果编译器不知道变量 point 的确切类型,由于对象布局不能确定,编译器无法深度地优化这段代码,造成性能瓶颈。
  • 没有类型也会造成属性的类型缺少限制,例如 point.x 的类型在此时为 number,它也可以被赋值成其他类型,造成额外的运行时检查和开销。
代码语言:javascript
代码运行次数:0
运行
复制
 // TypeScript代码片段
 const point = { // 在ArkTS中,编译时错误,必须标注类型
     ×: 0,
     y: 0
 }
  • 在 ArkTS 中,需要为对象字面量标注类型。
代码语言:javascript
代码运行次数:0
运行
复制
 // ArkTS代码片段
 interface Point {
     x:number,
     y:number
 }
 ​
 const point: Point ={
     ×:0,
     y:0
 }

3.不支持structural typing

代码语言:javascript
代码运行次数:0
运行
复制
 //TypeScript代码
 class C{
     s: string =""
 }
 ​
 class D{
     n: number = 0
     S: string ="
 }
 ​
 function foo(c: C){
     console.log(c.s)
 }
 ​
 foo(new D()) //在ArkTS中,编译时错误,不支持structural typing

以上 TS 代码片段展示了 structural typing 特性。在 ArkTS 已经采用了 nominal typing 类型系统的前提下,如果额外支持 structural typing 给语言实现和开发者均会带来不必要的复杂度。在示例中,foo 虽然声明参数类型是 C,但也可以传递类型 D 的变量,这种灵活性可能不符合开发者的意图,容易带来程序行为的正确性问题。另外,由于类型 D 和类型 C 布局不同,那么 foo 中对 c.s 这个属性访问就不能被优化成根据固定偏移量访问的方式,从而给运行时性能造成瓶颈。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ArkTS 是鸿蒙生态的应用开发语言
    • 认识 ArkTS
    • ArkTS 设计理念
    • ArkTS 相比 TS 特性差异
      • 1.不支持在运行时更改对象布局
      • 2.对象字面量须标注类型
      • 3.不支持structural typing
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档