什么是 ArkTS?OpenHarmony 和 HarmonyOS 应用背后的语言
简短回答: 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 的语法。了解类型、类和接口就掌握了大部分语言基础。