本文是《鸿蒙开发小白入门学习计划.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 几乎一样,但多了装饰器与更严的类型检查。

步骤一、跑通"写代码 → 看输出"闭环

  1. 打开 W1 项目,展开 entry → src → main → ets → pages → Index.ets
  2. struct Index 里加一个生命周期回调,打印一句话:
    aboutToAppear(): void {
      console.log('W2 练习开始')
    }
    
  3. 运行到模拟器(W1 已配好),打开底部 Log 窗口,搜索 W2 练习开始,能看到即闭环成功。
  4. 之后每写一个练习,都用 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 的差异(必看,避坑)

写法TypeScriptArkTS说明
任意类型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 验证能跑通:

  1. 变量与类型 ×2(如:枚举取值、联合类型赋值)
  2. 函数 ×2(含默认参数、可选参数各一)
  3. 类 ×2(一个实现接口、一个用继承)
  4. 接口 ×2(定义两个不同接口并实现)
  5. Promise / async ×2(一个延时返回、一个模拟请求)

必须记住的点

  • ArkTS 文件后缀是 .ets,写在 entry/src/main/ets/ 下。
  • 验证靠 console.log + 底部 Log 窗口。
  • @State 的值变了 UI 会自动刷新——这是和命令式开发(手动改 View)最大的不同。
  • 编译器红波浪线 = 错误提示,鼠标悬停能看到原因,先学会读它。

常见坑(提前避)

  1. .ets 里写 let x: any 会直接报错——ArkTS 禁 any,老 TS 习惯要改。
  2. console.log 看不到?确认运行的是模拟器/真机,且 Log 窗口筛选没挡住;可加自定义 tag 过滤。
  3. setTimeout 用于练习没问题,但正式业务里网络/文件要用系统 API(W7/W8 学)。
  4. 练习代码写在 struct 外面的普通函数里,别塞进 build()
  5. 装饰器 @Entry/@Component 只能用在 struct 上,用在 class 上会报错。
  6. ArkTS 里 number 不分 int/float,统一用 number;别写 int

实操任务:按上面 9 步走完,写出 10 个语法练习并通过 Log 验证。
验收:能在 .ets 文件里读懂并修改示例代码;编译器报错时,能根据红波浪线悬停信息定位问题;10 个练习全部 console.log 有正确输出。


二、参考学习链接

1. 官方下载

2. 官方文档

3. 社区与踩坑

4. Markdown 写作参考(CSDN 发布用)

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐