鸿蒙ArkTS中级语法


鸿蒙ArkTS中级语法系统化教程(完整版)


一、版本与开发环境

  1. API版本说明

    API 11 :开发者预览版(Beta),语法与API 12基本一致

    API 12 :商用稳定版,Mate 70系列设备搭载

    兼容性注意:API 9/10旧版本存在语法差异,需升级适配

  2. 开发工具要求

    • 使用DevEco Studio 4.0+,推荐5.0+

    • 禁用已废弃语法:varfor...in、隐式类型转换等


二、核心语法规范

1. 变量与类型系统

变量声明

typescript 复制代码
let name: string = "Harmony";  // 显式类型声明
const MAX_LENGTH = 100;       // 类型推断为number

• 禁止使用any,必须显式声明类型 • 联合类型:let id: string | number;

类型严格性

• 禁用==,必须使用===严格比较

• 禁止undefined/null直接作为类型,需用联合类型:
typescript let value: string | undefined; // 正确

2. 函数进阶

可选参数与默认值

typescript 复制代码
// 可选参数(?)
function greet(name?: string): void { 
  if (name !== undefined) console.log(`Hello, ${name}`);
}

// 默认参数
function multiply(x: number, y: number = 2): number {
  return x * y;
}

函数重载

typescript 复制代码
function process(input: string): void;
function process(input: number): void;
function process(input: any): any { 
  // 实现逻辑
}

Rest参数与箭头函数

typescript 复制代码
// Rest参数求和
function sum(...nums: number[]): number {
  return nums.reduce((acc, cur) => acc + cur, 0);
}

// 箭头函数(Lambda表达式)
const add = (x: number, y: number): number => x + y;
3. 闭包与内存管理

闭包定义

typescript 复制代码
function counter() {
  let count = 0;
  return () => count++; // 闭包持有count的引用
}
const c = counter();
console.log(c()); // 1
console.log(c()); // 2

内存泄漏风险

• 闭包持久化变量导致无法自动回收

• 解决方式:使用后显式解除引用
typescript let z = counter(); z = null; // 手动释放


三、面向对象编程

1. 类与对象

类定义规范

typescript 复制代码
class Person {
  name: string = "";      // 属性必须初始化
  age: number = 0;       // 显式类型声明
  
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

访问控制符

修饰符 作用域
public 默认,类内外均可访问
private 仅类内部访问
protected 类及子类可访问

静态成员

typescript 复制代码
class MathUtils {
  static PI: number = 3.1415;
  static circleArea(r: number): number {
    return this.PI * r * r;
  }
}
2. Getter/Setter方法

属性封装

typescript 复制代码
class User {
  private _age: number = 0;
  
  get age(): number { 
    return this._age; 
  }
  
  set age(value: number) { 
    this._age = value > 0 ? value : 0;
  }
}
3. 继承与多态

继承语法

typescript 复制代码
class Student extends Person {
  grade: string = "";
  
  constructor(name: string, age: number, grade: string) {
    super(name, age);
    this.grade = grade;
  }
}

禁止重复属性继承

typescript 复制代码
// 错误示例:父类和子类有同名属性
class A { name: string = ""; }
class B extends A { name: string = ""; } // 编译错误

四、接口与泛型

1. 接口定义

基础接口

typescript 复制代码
interface Drawable {
  draw(): void;
}

class Circle implements Drawable {
  draw() { 
    console.log("Drawing circle"); 
  }
}

函数类型接口

typescript 复制代码
interface Processor {
  (input: string): void;
  (input: number): void;
}
2. 泛型编程

泛型函数

typescript 复制代码
function identity<T>(arg: T): T {
  return arg;
}

泛型类

typescript 复制代码
class Box<T> {
  content: T;
  constructor(value: T) { 
    this.content = value; 
  }
}

Record类型

typescript 复制代码
const userMap: Record<string, string> = {
  'id': '001',
  'name': 'Alice'
};

五、高级数据类型

1. 枚举(Enum)

标准枚举

typescript 复制代码
enum Color { 
  Red = "#FF0000", 
  Green = "#00FF00",
  Blue = "#0000FF"
}

严格类型约束

• 枚举值必须统一类型(全数值或全字符串)

2. 数组操作

类型化数组

typescript 复制代码
let numbers: number[] = [1, 2, 3];
let strings: Array<string> = ["a", "b"];

循环语法

typescript 复制代码
// 禁止使用for...in,推荐for循环
for (let i = 0; i < numbers.length; i++) {
  console.log(numbers[i]);
}

六、开发实践与优化

1. 资源引用规范

资源路径语法

typescript 复制代码
Image($r("app.media.icon"))        // 图片资源
Text($r("app.string.welcome"))     // 字符串资源
2. 组件生命周期

关键生命周期方法

方法 触发时机
aboutToAppear 组件创建时
aboutToDisappear 组件销毁前
onPageShow 页面显示时
onPageHide 页面隐藏时
3. 性能优化

减少闭包使用 :避免不必要的内存占用

显式类型声明 :提升编译期错误检测能力

避免动态类型 :禁用any,使用联合类型替代


七、常见问题解析(结合官方文档)

  1. API版本差异

    • API 9中for...of可用,但API 12中已禁用

    • 使用let/const替代var,避免作用域污染

  2. 严格模式限制

    • 对象字面量初始化必须显式定义类型:

    typescript 复制代码
    // 错误示例
    let obj = { name: "Test" };  // 需改为:
    interface ObjType { name: string }
    let obj: ObjType = { name: "Test" };
  3. 类型推断优化

    • 函数返回值必须显式声明类型

    • 禁止省略箭头函数返回类型:

    typescript 复制代码
    // 错误写法
    const fn = (x: number) => x * 2;  
    // 正确写法
    const fn = (x: number): number => x * 2;

八、完整示例项目

typescript 复制代码
// 用户管理系统(含类、接口、泛型)
interface Serializable {
  serialize(): string;
}

class User implements Serializable {
  constructor(
    public id: number,
    public name: string,
    public age: number
  ) {}

  serialize(): string {
    return JSON.stringify(this);
  }
}

class UserManager<T extends Serializable> {
  private users: T[] = [];

  addUser(user: T): void {
    this.users.push(user);
  }

  getUsers(): string[] {
    return this.users.map(u => u.serialize());
  }
}

// 使用示例
const manager = new UserManager<User>();
manager.addUser(new User(1, "Alice", 25));
console.log(manager.getUsers());

附录:官方推荐规范

  1. 代码风格指南

    • 函数/方法参数超过3个时应换行

    • 类属性按public > protected > private顺序声明

  2. 工具链配置

    • 启用严格模式:compilerOptions.strict: true

    • 开启代码压缩:buildOptimization: true

  3. 调试技巧

    • 使用console.debug替代console.log

    • 开启ArkTS性能分析器监控内存泄漏


本教程完整覆盖课程知识点,结合鸿蒙官方文档要求,适用于API 11+版本开发。建议开发者通过实际项目练习巩固概念,并定期查阅OpenHarmony官方文档获取最新规范。

相关推荐
郝晨妤29 分钟前
【鸿蒙5.0】向用户申请麦克风授权
linux·服务器·前端·华为·harmonyos·鸿蒙
郝晨妤41 分钟前
【鸿蒙5.0】鸿蒙登录界面 web嵌入(隐私页面加载)
前端·华为·harmonyos
陆仟1 小时前
DevEco Studio编辑器的使用-代码code Linter检查
harmonyos
痕忆丶11 小时前
鸿蒙北向应用开发:deveco 5.0 kit化文件相关
harmonyos
试水年华12 小时前
鸿蒙Next-集成HmRouter的路由模式
linux·运维·服务器·华为·harmonyos·ark-ts语言
qq_5537603214 小时前
HarmonyOS WebSocket全场景应用开发深度解析
华为·harmonyos·鸿蒙
别说我什么都不会14 小时前
OpenHarmony解读之设备认证:pake协议-客户端发起end请求
物联网·嵌入式·harmonyos
小镇梦想家16 小时前
关于鸿蒙NEXT开发小习惯
harmonyos
Hi-Dison18 小时前
Open HarmonyOS 5.0 分布式软总线子系统 (DSoftBus) 详细设计与运行分析报告
分布式·华为·harmonyos
李游Leo20 小时前
HarmonyOS:ArkTS Path 组件自学指南
harmonyos