什么是 ArkTS?OpenHarmony 和 HarmonyOS 应用背后的语言

发布:

arkts语言基础

简短回答: ArkTS 是 OpenHarmony 和 HarmonyOS 应用开发的首选编程语言。它基于 TypeScript 并保留其基本风格,但增加了更严格的规则(如强制静态类型),使代码可以在编译期检查并运行得更快。

什么是 ArkTS?

根据 OpenHarmony 官方文档,ArkTS 在保持 TypeScript 基本风格的同时,对 TypeScript 生态进行了扩展。它尽可能保持与 TypeScript 和 JavaScript 生态的兼容,并在开发阶段强化静态检查和分析,从而提高程序的稳定性和运行性能。

ArkTS 与声明式 UI 框架 ArkUI 搭配使用,在 DevEco Studio 中开发。

ArkTS 与 TypeScript 有什么区别?

文档中列出的主要特性(API 10 及以上):

特性含义
强制静态类型类型在编译期已知,编译器可以验证代码,运行时需要的检查更少。
固定对象布局程序运行期间对象的结构不能改变。
受限的运算符为了清晰和性能,限制运算符的行为,例如一元加号只能用于数值类型。
不支持结构化类型由于实现复杂,暂不支持。

实际使用中,一些动态的 TypeScript 写法(例如 any 类型)在 ArkTS 中是不允许的。迁移代码时请遵循官方的 TypeScript 到 ArkTS 适配规则。

ArkTS 代码是什么样子的?

如果你了解 TypeScript,语法会很熟悉。变量使用 let 和 const:

let hi: string = 'hello';
const hello: string = 'hello';

数组、枚举和联合类型:

let names: string[] = ['Alice', 'Bob', 'Carol'];
enum ColorSet { Red, Green, Blue }
type Animal = Cat | Dog | Frog | number | string | null;

函数和类需要显式声明类型:

function add(x: string, y: string): string {
  return `${x} ${y}`;
}

class Person {
  public name: string = '';
  constructor(n: string) {
    this.name = n;
  }
}

ArkTS 的空安全是怎样的?

所有类型默认不可为空。要允许 null,请使用联合类型,并使用可选链安全地访问属性:

let x: number | null = null;
// return this.spouse?.nick;

如何用 ArkTS 和 ArkUI 构建界面?

页面是一个带 @Component 装饰器和 build() 方法的 struct。@Entry 把页面标记为入口,@State 让值具有响应性,值变化时界面会自动更新:

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

在你的第一个项目中构建并运行它:你的第一个 ArkTS 应用。

后续步骤

常见问题

ArkTS 和 TypeScript 一样吗?

不一样。ArkTS 基于 TypeScript 并保留其基本风格,但为了性能和稳定性增加了限制:强制静态类型、固定对象布局、受限的运算符语义,以及不支持结构化类型。

现有的 TypeScript 或 JavaScript 代码可以直接在 ArkTS 中使用吗?

通常需要修改。ArkTS 禁用了一些动态特性,官方文档提供了从 TypeScript 迁移到 ArkTS 的适配规则。

ArkUI 是什么,它和 ArkTS 是什么关系?

ArkUI 是声明式 UI 框架。你用 ArkTS 编写 ArkUI 界面,使用 @Entry、@Component、@State 等装饰器和 build() 方法。

需要先学 TypeScript 吗?

会很有帮助,因为 ArkTS 保留了 TypeScript 的语法。了解类型、类和接口就掌握了大部分语言基础。