鸿蒙开发手册HARMONYOS

CHAPTER 01语言基础 · LANGUAGE

ArkTS 语言基础

ArkTS 是 TypeScript 的超集,强化了强类型与声明式状态。掌握类型系统、状态变量、装饰器、接口与泛型,为 ArkUI 与架构打地基。

开始阅读难度入门约2.5小时
01.1

设计哲学

ArkTS 在 TypeScript 之上强化强类型(禁止 any 隐式、要求显式类型)、并原生集成声明式 UI 所需的状态装饰器。

与 TypeScript 的关系

ArkTS 兼容大部分 TS 语法,但移除了运行时类型不确定特性(如结构性 any 滥用),以换取更高的运行性能与可预测性。

01.2

类型与推断

变量需明确或可被推断的类型。number/string/boolean/数组/联合类型皆支持。

let count: number = 0
let name = "hi"          // 推断为 string
let list: number[] = [1, 2, 3]
type Id = number | string   // 联合类型
01.3

类与接口

用 class 建模,interface 定义契约;实现接口保证结构一致。

interface Identifiable { id: number }
class User implements Identifiable {
  id: number
  name: string
  constructor(id: number, name: string) { this.id = id; this.name = name }
}
01.4

泛型

泛型让函数与类在保持类型安全的同时复用逻辑。

function first<T>(arr: T[]): T | undefined { return arr[0] }
class Box<T> { value: T; constructor(v: T) { this.value = v } }
01.5

装饰器与状态

@State、@Prop、@Link、@Observed 等装饰器标记响应式状态,是 ArkUI 数据驱动的基础。

@Entry @Component
struct Counter {
  @State count: number = 0
  build() {
    Button(`点击 ${this.count}`).onClick(() => this.count++)
  }
}
状态装饰器分工

@State 组件私有、@Prop 父传子只读、@Link 父子双向、@Provide/@Consume 跨层级,选错会导致不刷新。

01.6

枚举与联合

enum 表达有限集合,联合类型表达状态机,配合穷尽判断更安全。

enum LoadState { Loading, Success, Error }
function render(s: LoadState) {
  switch (s) { case LoadState.Loading: return "..."; /* 穷尽 */ }
}
01.7

模块化

用 export/import 组织代码,oh-package.json5 管理依赖,模块是复用与解耦的单位。

// utils.ets
export function clamp(v: number, min: number, max: number): number {
  return Math.min(Math.max(v, min), max)
}
01.8

常见陷阱

为什么改了 @State 界面没刷新?

多因直接改对象内部属性而非替换引用,或用了未被装饰的普通变量。确保被观察状态在 @State 等装饰器下,且变更触发引用更新。

ArkTS 能用 any 吗?

不推荐且受限,ArkTS 强化强类型以保性能。确需动态时用联合类型或 unknown + 类型收窄。

01.9

实战练习

延伸资源