鸿蒙开发 W2 手把手入门:ArkTS 语言基础
本文是《鸿蒙开发小白入门学习计划.md》中"ArkTS 语言基础"周(W2)的单独扩写版,沿用"第一行代码"式手把手写法。
主计划表保持精简,本周的详细操作步骤、代码示例与参考链接集中放在本文,便于单独查阅与 CSDN 发布。
前置:请先完成 W1(环境已跑通、项目能运行到模拟器)。本周无需安装任何新工具。
一、ArkTS 语言基础
本节采用"第一行代码"式的手把手写法:每条语法都给你可运行的代码和验证方法。跟着敲,约 3–4 小时能写完 10 个练习。
学习目标
- 搞清 ArkTS 与 TypeScript 的关系
- 掌握变量、类型、函数、类、接口
- 混个眼熟三个核心装饰器
@Entry/@Component/@State - 能用
Promise/async/await写异步代码 - 知道 ArkTS 比 TS 严在哪,少踩坑
本周工具说明(无需新装)
- 直接在 W1 建好的项目里写代码,所有练习都写在
.ets文件中。 - 验证手段:用
console.log(...)打印结果,到 DevEco 底部 Log 窗口查看(可筛选包名或自定义 tag)。 - ArkTS 文件后缀是
.ets,语法和 TS 几乎一样,但多了装饰器与更严的类型检查。
步骤一、跑通"写代码 → 看输出"闭环
- 打开 W1 项目,展开
entry → src → main → ets → pages → Index.ets。 - 在
struct Index里加一个生命周期回调,打印一句话:aboutToAppear(): void { console.log('W2 练习开始') } - 运行到模拟器(W1 已配好),打开底部 Log 窗口,搜索
W2 练习开始,能看到即闭环成功。 - 之后每写一个练习,都用
console.log把结果打出来验证。
步骤二、认识 ArkTS 与 TypeScript 的关系
- ArkTS 是 TypeScript 的超集:TS 能写的语法它基本都能写。
- 额外加了:装饰器(
@Entry等)、更严格的类型检查、为运行时性能做的限制。 - 一句话:先当 TypeScript 学,再记 ArkTS 的"不许做的事"(见步骤八)。
步骤三、变量与基础类型
在 .ets 文件里(struct 之外或函数内)练习:
let name: string = 'HarmonyOS' // 字符串
const pi: number = 3.14 // 数值(const 不可改,number 不分 int/float)
let isOpen: boolean = true // 布尔
let list: number[] = [1, 2, 3] // 数组
enum Color { Red, Green, Blue } // 枚举
let c: Color = Color.Green
let id: number | string = 1 // 联合类型(union)
id = 'A001' // 联合类型可赋值多种类型
注意:let/const 必须带类型或能推断;ArkTS 不允许 any(见步骤八)。
步骤四、函数(可选参数 / 默认参数 / 返回值)
// 普通函数
function add(a: number, b: number): number {
return a + b
}
// 默认参数
function greet(name: string = '世界'): string {
return '你好,' + name
}
// 可选参数(加 ?)
function log(msg?: string): void {
console.log(msg ?? '空消息')
}
console.log(add(1, 2)) // 3
console.log(greet()) // 你好,世界
console.log(greet('鸿蒙')) // 你好,鸿蒙
练习:写一个 function max(a: number, b: number): number 返回较大值,并打印验证。
步骤五、类与接口
// 接口:定义"长什么样"
interface Animal {
name: string
eat(): void
}
// 类:实现接口
class Cat implements Animal {
name: string
constructor(name: string) {
this.name = name
}
eat(): void {
console.log(this.name + ' 吃鱼')
}
}
// 继承
class Dog extends Cat {
bark(): void {
console.log('汪汪')
}
}
const c = new Cat('咪咪')
c.eat() // 咪咪 吃鱼
练习:定义 interface Shape { area(): number },写 Circle 类实现它并打印面积。
步骤六、装饰器入门(先混眼熟,W4 深用)
ArkTS 的"灵魂"是装饰器。先看一段示意代码(build 里写 UI 留到 W3):
@Entry // 标记这是页面入口(一个页面仅一个)
@Component // 标记这是个自定义组件(struct 必须配它)
struct Index {
@State message: string = 'Hello' // 组件内状态(变化会触发 UI 刷新)
build() {
// UI 在这里描述,W3 才细学
}
}
@Entry:页面入口,一个页面有且仅有一个。@Component:声明自定义组件(必须加在struct上)。@State:组件私有状态,值变 → UI 自动刷新(声明式 UI 的核心)。
本周只记"它们是干什么的",具体怎么用留到 W4。
步骤七、异步编程(Promise / async / await)
网络请求、文件读写都是异步的,必须会:
// 返回一个 Promise 的延时函数
function delay(ms: number): Promise<string> {
return new Promise((resolve) => {
setTimeout(() => resolve('延时结束'), ms)
})
}
// 用 async/await 等结果
async function run(): Promise<void> {
console.log('开始')
const result = await delay(1000)
console.log(result) // 1 秒后打印:延时结束
}
run()
练习:写 function fetchUser(): Promise<{ id: number; name: string }>,用 setTimeout 模拟返回用户对象,再用 await 取出并打印。
步骤八、ArkTS 与 TypeScript 的差异(必看,避坑)
| 写法 | TypeScript | ArkTS | 说明 |
|---|---|---|---|
| 任意类型 | let x: any 允许 | ❌ 不允许 | 必须声明具体类型 |
| 空值 | let y = null 允许 | ❌ 报错 | 用联合 string | null |
| 动态类型 | obj.field 动态加 | ❌ 禁止 dynamic | 类型必须静态可知 |
| 隐式 any | 参数可推断 any | ❌ 要求显式类型 | 参数要写类型 |
| 结构类型 | 较宽松 | 更严格 | 接口实现要完整匹配 |
常见报错对照:
- 红波浪线
Object is possibly 'null'→ 你用了可能为 null 的变量,先判空或改类型。 Parameter 'x' implicitly has an 'any' type→ 给参数补上类型。Type 'X' is not assignable to type 'Y'→ 类型不匹配,检查赋值。
步骤九、完成 10 个语法小练习(验收用)
按下面清单各写 2 个,全部用 console.log 验证能跑通:
- 变量与类型 ×2(如:枚举取值、联合类型赋值)
- 函数 ×2(含默认参数、可选参数各一)
- 类 ×2(一个实现接口、一个用继承)
- 接口 ×2(定义两个不同接口并实现)
- Promise / async ×2(一个延时返回、一个模拟请求)
必须记住的点
- ArkTS 文件后缀是
.ets,写在entry/src/main/ets/下。 - 验证靠
console.log+ 底部 Log 窗口。 @State的值变了 UI 会自动刷新——这是和命令式开发(手动改 View)最大的不同。- 编译器红波浪线 = 错误提示,鼠标悬停能看到原因,先学会读它。
常见坑(提前避)
- 在
.ets里写let x: any会直接报错——ArkTS 禁 any,老 TS 习惯要改。 console.log看不到?确认运行的是模拟器/真机,且 Log 窗口筛选没挡住;可加自定义 tag 过滤。setTimeout用于练习没问题,但正式业务里网络/文件要用系统 API(W7/W8 学)。- 练习代码写在
struct外面的普通函数里,别塞进build()。 - 装饰器
@Entry/@Component只能用在struct上,用在class上会报错。 - ArkTS 里
number不分 int/float,统一用number;别写int。
实操任务:按上面 9 步走完,写出 10 个语法练习并通过 Log 验证。
验收:能在 .ets 文件里读懂并修改示例代码;编译器报错时,能根据红波浪线悬停信息定位问题;10 个练习全部 console.log 有正确输出。
二、参考学习链接
1. 官方下载
- DevEco Studio 官方下载(唯一地址):https://developer.huawei.com/consumer/cn/deveco-studio/
- 华为开发者账号注册:https://developer.huawei.com/consumer/cn/
- DevEco Studio 下载与安装官方说明:https://device.harmonyos.com/cn/docs/apiref/harmonyos-guides/ide-software-install
2. 官方文档
- HarmonyOS 应用开发指南(harmonyos-guides,认准 NEXT/Stage):https://developer.huawei.com/consumer/cn/doc/harmonyos-guides
- ArkTS 语言文档(在上方指南站内检索 “ArkTS” 即可定位语法 / 装饰器 / 与 TS 差异章节):https://developer.huawei.com/consumer/cn/doc/harmonyos-guides
- 仓颉编程语言官网:https://cangjie-lang.cn/
3. 社区与踩坑
- 华为开发者论坛:https://developer.huawei.com/consumer/cn/forum/
- CSDN 鸿蒙专区 / 51CTO 鸿蒙开发者社区:检索"ArkTS 语法""ArkTS 与 TS 差异"等
4. Markdown 写作参考(CSDN 发布用)
- Markdown 基础语法(CSDN 文章排版参考):https://blog.csdn.net/weixin_45494811/article/details/104307670
更多推荐


所有评论(0)