鸿蒙ArkTS中级语法系统化教程(完整版)
一、版本与开发环境
-
API版本说明
• API 11 :开发者预览版(Beta),语法与API 12基本一致
• API 12 :商用稳定版,Mate 70系列设备搭载
• 兼容性注意:API 9/10旧版本存在语法差异,需升级适配
-
开发工具要求
• 使用DevEco Studio 4.0+,推荐5.0+
• 禁用已废弃语法:
var
、for...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
,使用联合类型替代
七、常见问题解析(结合官方文档)
-
API版本差异
• API 9中
for...of
可用,但API 12中已禁用• 使用
let
/const
替代var
,避免作用域污染 -
严格模式限制
• 对象字面量初始化必须显式定义类型:
typescript// 错误示例 let obj = { name: "Test" }; // 需改为: interface ObjType { name: string } let obj: ObjType = { name: "Test" };
-
类型推断优化
• 函数返回值必须显式声明类型
• 禁止省略箭头函数返回类型:
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());
附录:官方推荐规范
-
代码风格指南
• 函数/方法参数超过3个时应换行
• 类属性按
public
>protected
>private
顺序声明 -
工具链配置
• 启用严格模式:
compilerOptions.strict: true
• 开启代码压缩:
buildOptimization: true
-
调试技巧
• 使用
console.debug
替代console.log
• 开启ArkTS性能分析器监控内存泄漏
本教程完整覆盖课程知识点,结合鸿蒙官方文档要求,适用于API 11+版本开发。建议开发者通过实际项目练习巩固概念,并定期查阅OpenHarmony官方文档获取最新规范。