ArkTS 基础语法学习笔记
ArkTS 基础语法学习笔记
本文是我学习鸿蒙 ArkTS 基础篇的总结笔记,涵盖基础入门、变量和类型、数组、对象、函数、箭头函数六个部分,方便自己回顾,也希望对同样在学 ArkTS 的朋友有帮助。
一、ArkTS 基础入门
ArkTS 是华为鸿蒙(HarmonyOS)为 ArkUI 声明式开发范式量身打造的编程语言,它在 TypeScript(TS)的基础上做了扩展和约束,同时保留了 TS 的大部分语法特性。可以简单理解为:
JavaScript → TypeScript → ArkTS
也就是说,只要有 JS/TS 基础,上手 ArkTS 会非常快。ArkTS 相比 TS 主要做了以下几点强化:
- 强制静态类型检查:不允许
any、unknown这类模糊类型随意使用,变量类型在编译期就要明确,减少运行时错误。 - 不支持部分动态特性:比如不支持
Object.defineProperty、with语句等动态修改对象结构的写法,保证代码可预测、可优化。 - 面向对象 + 声明式 UI:ArkTS 既支持传统的类、接口写法,也提供了
@Component、@State等装饰器(Decorator)用于声明式构建 UI。
一个最简单的 ArkTS 文件后缀是 .ets(Extended TypeScript),基础的 Hello World 大致长这样:
function sayHello(name: string): string {
return `Hello, ${name}!`;
}
console.info(sayHello('ArkTS'));
学习入门阶段,重点是搭好 DevEco Studio 开发环境,跑通一个空的 Ability 工程,理解好 .ets 文件的基本结构,为后面学变量、函数打基础。
二、变量和类型
2.1 变量声明
ArkTS 沿用 TS 的三种声明方式,但更推荐使用 let 和 const,不建议使用 var:
let age: number = 18; // 可变
const name: string = 'Tom'; // 不可变,声明后不能重新赋值
let:块级作用域,值可以修改,日常变量首选。const:块级作用域,值不可重新赋值,适合常量、不会变的配置项。var:ArkTS 中不推荐甚至部分场景会报错,因为它是函数作用域,容易引发变量提升等问题。
2.2 基本数据类型
ArkTS 是强类型语言,声明变量时最好显式标注类型:
let isDone: boolean = false;
let count: number = 100;
let message: string = 'ArkTS';
let notDefined: undefined = undefined;
let empty: null = null;
常见基础类型一览:
| 类型 | 说明 | 示例 |
|---|---|---|
number |
数字,不区分整数浮点数 | let n: number = 3.14 |
string |
字符串,支持模板字符串 | let s: string = `hi ${n}` |
boolean |
布尔值 | let b: boolean = true |
void |
一般用于函数无返回值 | function log(): void {} |
null / undefined |
空值 | - |
2.3 类型推断与类型注解
ArkTS 支持类型推断,但强烈建议关键变量都写上类型注解,这也是它和普通 JS 最大的区别之一:
let score = 90; // 推断为 number
let score2: number = 90; // 显式注解,更推荐
需要特别注意:ArkTS 不允许变量类型在运行时发生改变(不像 JS 那样随便变来变去),也不建议使用 any,这是刚开始学的时候最容易踩的坑。
三、数组
数组是 ArkTS 中最常用的数据结构之一,声明方式主要有两种:
// 方式一:类型 + 方括号(推荐)
let list1: number[] = [1, 2, 3];
// 方式二:泛型写法
let list2: Array<string> = ['a', 'b', 'c'];
3.1 常用操作
let fruits: string[] = ['apple', 'banana'];
fruits.push('orange'); // 添加元素
fruits.pop(); // 删除最后一个
console.info(fruits[0]); // 访问元素
console.info(fruits.length); // 获取长度
// 遍历
for (let fruit of fruits) {
console.info(fruit);
}
// forEach / map / filter 同样支持
let upper = fruits.map((item: string): string => item.toUpperCase());
3.2 注意点
- 数组一旦声明了元素类型,就不能混入其他类型的元素,比如
number[]里不能塞字符串,这一点和普通 JS 数组差别很大。 - 多维数组写法:
let matrix: number[][] = [[1, 2], [3, 4]];
四、对象
ArkTS 中定义对象结构,推荐使用 interface(接口)或 class(类),而不是像 JS 那样随意用字面量拼一个对象(ArkTS 对对象的动态扩展做了限制)。
4.1 使用 interface 定义对象结构
interface Person {
name: string;
age: number;
email?: string; // 可选属性
}
let p: Person = {
name: 'Tom',
age: 20
};
console.info(p.name);
4.2 使用 class 定义对象
class Animal {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
speak(): string {
return `${this.name} says hello`;
}
}
let dog = new Animal('旺财', 2);
console.info(dog.speak());
4.3 注意点
- ArkTS 中的对象结构在编译期就要确定,不支持给对象随意新增未声明的属性,这和 JS 中"对象是个筐,啥都能装"的用法不同,一开始很容易报错。
- 推荐尽量用
interface描述数据结构(比如接口返回的数据),用class封装带方法和状态的业务对象。
五、函数
5.1 普通函数声明
function add(a: number, b: number): number {
return a + b;
}
- 参数和返回值都建议显式标注类型。
- 如果函数没有返回值,返回类型写
void。
5.2 可选参数与默认参数
function greet(name: string, greeting?: string): string {
return `${greeting ?? 'Hello'}, ${name}`;
}
function greet2(name: string, greeting: string = 'Hi'): string {
return `${greeting}, ${name}`;
}
?表示可选参数,必须放在必填参数后面。- 也可以直接给参数写默认值,效果类似。
5.3 函数类型
函数本身也可以作为类型来声明变量:
let calc: (a: number, b: number) => number;
calc = (a, b) => a + b;
六、箭头函数
箭头函数是 ES6 引入、在 ArkTS 中也大量使用的简洁写法,尤其是在 UI 事件回调、数组方法(map/filter)里非常常见。
6.1 基本写法
// 普通函数
function add(a: number, b: number): number {
return a + b;
}
// 箭头函数写法
let add2 = (a: number, b: number): number => {
return a + b;
};
// 只有一行返回值时可以省略花括号和 return
let add3 = (a: number, b: number): number => a + b;
6.2 箭头函数 vs 普通函数
| 对比点 | 普通函数 | 箭头函数 |
|---|---|---|
this 指向 |
调用时动态绑定 | 继承外层作用域的 this,不会改变 |
| 写法 | 相对繁琐 | 更简洁,适合回调场景 |
是否有 arguments |
有 | 没有 |
在 ArkUI 组件里写按钮点击等事件回调时,箭头函数用得非常多,因为它不会改变 this 指向,可以直接访问组件内部的状态:
Button('点击我')
.onClick(() => {
this.count++; // 箭头函数中 this 仍指向组件实例
})
七、小结
这一阶段学下来,ArkTS 给我最大的感受是:"更严格的 TypeScript"。它牺牲了一部分 JS/TS 的灵活性(比如禁用 any、限制对象动态扩展),换来的是编译期就能发现的类型安全和更好的运行时性能,这也很符合它作为移动端/元服务开发语言的定位。
后续学习路线上,打算继续深入 ArkUI 的声明式开发(@Component、@State、@Prop 等装饰器),把这些基础语法真正用到界面开发中去,到时候再写一篇进阶笔记。
本文为个人学习笔记整理,如有理解偏差欢迎指正交流。
更多推荐



所有评论(0)