鸿蒙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官方文档获取最新规范。

相关推荐
SuperHeroWu75 小时前
【HarmonyOS 5】鸿蒙碰一碰分享功能开发指南
华为·harmonyos·应用·分享·碰一碰
lqj_本人6 小时前
鸿蒙OS&UniApp 制作动态加载的瀑布流布局#三方框架 #Uniapp
uni-app·harmonyos
lqj_本人8 小时前
鸿蒙OS&UniApp制作一个小巧的图片浏览器#三方框架 #Uniapp
华为·uni-app·harmonyos
lqj_本人11 小时前
鸿蒙OS&UniApp 开发的下拉刷新与上拉加载列表#三方框架 #Uniapp
华为·uni-app·harmonyos
Lucky me.11 小时前
关于mac配置hdc(鸿蒙)
macos·华为·harmonyos
lqj_本人12 小时前
鸿蒙OS&UniApp 制作个人信息编辑界面与头像上传功能#三方框架 #Uniapp
uni-app·harmonyos
国产化创客13 小时前
OpenHarmony轻量系统--BearPi-Nano开发板网络程序测试
网络·物联网·harmonyos·国产化
天夏已微凉19 小时前
OpenHarmony系统HDF驱动开发介绍(补充)
驱动开发·音视频·harmonyos
特立独行的猫a1 天前
HarmonyOS 【诗韵悠然】AI古诗词赏析APP开发实战从零到一系列(一、开篇,项目介绍)
人工智能·华为·harmonyos·古诗词
幽蓝计划1 天前
鸿蒙跨平台开发教程之Uniapp布局基础
harmonyos