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 等装饰器下,且变更触发引用更新。
不推荐且受限,ArkTS 强化强类型以保性能。确需动态时用联合类型或 unknown + 类型收窄。
01.9