ArkTS 关键字速查笔记

ArkTS 在 TypeScript 语法之上,针对鸿蒙生态与高性能场景做了静态化增强 。本笔记把官方文档与社区实践中最常用的关键字按场景分组,方便你随查随用。

变量与类型声明

声明变量 / 常量

  • let:块级作用域变量,推荐默认使用。
  • const:块级作用域常量,值不可重新赋值。
  • var:函数级作用域,存在变量提升,官方建议避免。

基础类型关键字

  • numberstringboolean
  • bigint:大整数,避免 number 精度丢失。
  • void:函数无返回值。
  • never:永不返回(如抛出异常)。
  • null / undefined

复合与高级类型

  • Array<T>T[]:数组。
  • enum:枚举。
  • interface:对象契约。
  • type:类型别名 / 联合类型。
  • Record<K, V>:键值映射。

面向对象与类

类与继承

  • class:定义类。
  • extends:继承父类。
  • super:调用父类构造函数或方法。
  • abstract:抽象类 / 抽象方法。

访问修饰符

  • public(默认):任意位置可见。
  • private:仅类内部可见。
  • protected:类内部及子类可见。

成员修饰

  • readonly:只读属性。
  • static:静态字段 / 方法。

函数与异步

函数相关

  • function:函数声明。
  • return:返回值并结束函数。
  • =>:箭头函数。
  • ...:rest 参数。

异步流程

  • async:声明异步函数。
  • await:等待 Promise。

模块系统

导出

  • export:命名导出。
  • export default:默认导出。

导入

  • import:静态导入。
  • import():动态导入(返回 Promise)。

流程控制

类别 关键字
条件 if / else / switch / case / default
循环 for / while / do...while / for...of / for...in
控制 break / continue / return

空安全与可选链

  • T | null | undefined:显式可空类型。
  • !:非空断言。
  • ??:空值合并运算符。
  • ?.:可选链。

ArkUI 特有装饰器

  • @Entry:标记应用入口组件。
  • @Component:定义自定义组件。
  • @State:组件内部状态。
  • @Prop:父向子单向数据。
  • @Link:父子双向数据绑定。
  • build():UI 描述入口方法。
关键字 意义 使用场景 注意事项 通俗解释 代码示例
let 声明块级作用域变量 变量值需要重新赋值时 存在暂时性死区,不会变量提升 就像"临时工",在代码块内有效,可随时更换 let count: number = 1; count = 2; // 允许重新赋值
const 声明块级作用域常量 值不会改变的变量 必须初始化,不能只声明不赋值 就像"正式工合同",签了就改不了 const PI: number = 3.14159; // PI = 3.14; 错误! 不能重新赋值
var 声明函数级作用域变量 旧式变量声明,兼容性考虑 存在变量提升,容易出错,不建议使用 像"老式电话",功能旧还容易出问题 var oldValue = 10; // 不推荐使用
number 数值类型 存储整数、浮点数 注意浮点数精度问题 就是数学里的数字 let age: number = 25; let price: number = 99.99;
string 字符串类型 文本数据存储 可用单引号、双引号、反引号 就是文字信息 let name: string = 'ArkTS'; let msg: string = "Hello ${name}";
boolean 布尔类型 表示真/假值 只有true和false两个值 就像"开关",只有开和关 let isValid: boolean = true; let isDone: boolean = false;
Array<T> 数组类型 存储同一类型的数据集合 类型安全,不能混入其他类型 像"集装箱",装同类物品 let numbers: Array<number> = [1, 2, 3]; let names: string[] = ['Jack', 'Rose'];
type 类型别名 简化复杂类型定义 只是别名,不创建新类型 给复杂类型起个"外号" `type Color = 'Red'
class 定义类 创建对象模板 类名通常大写 对象的"设计图纸" class Person { name: string; constructor(name: string) { this.name = name; } }
private 私有修饰符 保护内部数据不被外部访问 子类也无法访问 就像"个人日记",只有自己能看 class BankAccount { private balance: number; // 外部无法直接访问balance }
extends 继承 代码复用,建立is-a关系 单继承,只能继承一个父类 就像"儿子继承父亲的特征" class Employee extends Person { department: string; }
super 调用父类 子类构造函数中调用父类构造 必须在子类constructor中第一行调用 就像"先问问爸爸的意见" class Student extends Person { grade: number; constructor(name: string, grade: number) { super(name); this.grade = grade; } }
=> 箭头函数 简化函数写法,绑定this 没有自己的this,arguments 像"快递员",直接送货不绕路 const add = (a: number, b: number): number => a + b; const square = (x: number) => x * x;
async 异步函数 处理耗时操作 总是返回Promise对象 告诉程序"别等我,你先忙" async function fetchData() { return await someAsyncCall(); }
await 等待异步完成 在async函数内等待Promise 只能在async函数中使用 像"等外卖",到了再继续吃 async function loadUser() { let user = await getUserData(); console.log(user); }
if/else 条件判断 根据条件执行不同代码块 注意条件表达式的布尔值 就像"十字路口",根据路标选择方向 if (score >= 60) { console.log('及格'); } else { console.log('不及格'); }
for 循环语句 重复执行固定次数的代码 注意循环变量的作用域 像"流水线",重复相同工序 for (let i = 0; i < 5; i++) { console.log(i); }
?. 可选链 安全访问可能为null的对象属性 遇到null/undefined立即返回undefined 像"试探性敲门",没人应就离开 let userName = user?.profile?.name; // 如果user或profile为null,返回undefined
?? 空值合并 提供默认值 只对null/undefined生效 像"备用计划",A不行就用B let displayName = userName ?? '匿名用户'; // userName为null时显示'匿名用户'
@Entry 应用入口 标记应用的根组件 一个应用至少有一个@Entry 就像"公司大门",从这里进入 @Entry @Component struct MyApp { build() { ... } }
@Component 自定义组件 创建可复用的UI组件 必须有build()方法 像"乐高积木",可以重复使用 @Component struct MyButton { build() { Button('点击我') } }
@State 组件状态 管理组件内部数据状态 变化时触发UI重新渲染 像"组件的心情",变了就表现出来 @Component struct Counter { @State count: number = 0; // count变化时UI自动更新 }
@Prop 单向数据流 父组件向子组件传递数据 子组件不能修改@Prop变量 像"传家宝",只能看不能改 @Component struct Child { @Prop message: string; // 从父组件接收,不能修改 }
@Link 双向数据绑定 父子组件间双向数据同步 需要与父组件的@State配合使用 像"对讲机",两边都能说话 @Component struct Child { @Link value: number; // 修改value会同步到父组件 }
build() UI构建 描述组件UI结构 必须有且只能有一个根组件 像"建筑图纸",告诉系统怎么搭建 build() { Column() { Text('Hello') Button('Click') } }
enum 枚举类型 定义一组命名常量 编译时确定值,运行时只读 像"选择题选项",固定几个选择 enum Direction { Up, Down, Left, Right } let move: Direction = Direction.Up;
interface 接口 定义对象的结构契约 只定义结构,不包含实现 像"招聘要求",规定需要什么能力 interface User { name: string; age: number; } let user: User = {name: 'Tom', age: 20};
export 导出 模块中暴露变量、函数等 可以有多个export 像"商店橱窗",展示可买商品 export const PI = 3.14; export function calculate() { ... }
import 导入 从其他模块引入功能 路径需要正确 像"购物",从别处买来需要的东西 import { PI } from './math'; import ComponentA from './ComponentA';
void 无返回值 函数没有返回值时 不能赋值给其他类型 像"只做事不汇报" function logMessage(msg: string): void { console.log(msg); // 没有return语句 }
never 永不返回 函数总是抛出异常或死循环 不能有任何可到达的终点 像"有去无回的旅程" function throwError(): never { throw new Error('错误'); }

综合应用示例

完整的组件示例

复制代码
// 用户信息卡片组件
@Component
struct UserCard {
  @State user: User = { name: '张三', age: 25, isActive: true };
  @Prop theme: string = 'light';
  
  build() {
    Column() {
      // 使用可选链安全访问
      Text(this.user?.name ?? '未知用户')
        .fontSize(20)
        .fontColor(this.theme === 'dark' ? Color.White : Color.Black)
      
      // 条件渲染
      if (this.user.isActive) {
        Text('在线')
          .fontColor(Color.Green)
      } else {
        Text('离线')
          .fontColor(Color.Gray)
      }
      
      Button('切换状态')
        .onClick(() => {
          // 使用箭头函数
          this.user.isActive = !this.user.isActive;
        })
    }
    .padding(10)
  }
}

// 使用类型别名和接口
interface User {
  name: string;
  age: number;
  isActive: boolean;
  email?: string;  // 可选属性
}

type Theme = 'light' | 'dark' | 'auto';
相关推荐
深蓝海拓32 分钟前
PySide6从0开始学习的笔记(四)QMainWindow
笔记·python·学习·pyqt
sheeta199840 分钟前
LeetCode 每日一题笔记 日期:2025.12.15 题目:2110.股票平滑下跌阶段的数目
笔记·算法·leetcode
威哥爱编程6 小时前
【鸿蒙开发案例篇】鸿蒙6.0的pdfService与pdfViewManager终极爆破
harmonyos·arkts·arkui
智者知已应修善业8 小时前
【求中位数】2024-1-23
c语言·c++·经验分享·笔记·算法
张人玉8 小时前
百度 AI 图像识别 WinForms 应用代码分析笔记
人工智能·笔记·百度
xqqxqxxq9 小时前
背单词软件技术笔记(V1.0核心版及V2.0随机挖字母)
笔记
YJlio9 小时前
Active Directory 工具学习笔记(10.8):AdInsight——保存与导出(证据留存、共享与二次分析)
数据库·笔记·学习
xqqxqxxq10 小时前
背单词软件技术笔记(V2.0扩展版)
java·笔记·python
yuxb7310 小时前
Kubernetes核心组件详解与实践:controller
笔记·kubernetes
kirk_wang12 小时前
Flutter 三方库在 OHOS 平台的适配实践:以 flutter_mailer 为例
flutter·移动开发·跨平台·arkts·鸿蒙