ArkTS 关键字速查笔记
ArkTS 在 TypeScript 语法之上,针对鸿蒙生态与高性能场景做了。本笔记把官方文档与社区实践中最常用的关键字按场景分组,方便你随查随用。
·
ArkTS 在 TypeScript 语法之上,针对鸿蒙生态与高性能场景做了静态化增强 。本笔记把官方文档与社区实践中最常用的关键字按场景分组,方便你随查随用。
变量与类型声明
声明变量 / 常量
- let:块级作用域变量,推荐默认使用。
- const:块级作用域常量,值不可重新赋值。
- var:函数级作用域,存在变量提升,官方建议避免。
基础类型关键字
- number、string、boolean
- 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' | 'Blue';let favorite: 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@Componentstruct MyApp {build() { ... }} |
| @Component | 自定义组件 | 创建可复用的UI组件 | 必须有build()方法 | 像"乐高积木",可以重复使用 | @Componentstruct MyButton {build() {Button('点击我')}} |
| @State | 组件状态 | 管理组件内部数据状态 | 变化时触发UI重新渲染 | 像"组件的心情",变了就表现出来 | @Componentstruct Counter {@State count: number = 0;// count变化时UI自动更新} |
| @Prop | 单向数据流 | 父组件向子组件传递数据 | 子组件不能修改@Prop变量 | 像"传家宝",只能看不能改 | @Componentstruct Child {@Prop message: string;// 从父组件接收,不能修改} |
| @Link | 双向数据绑定 | 父子组件间双向数据同步 | 需要与父组件的@State配合使用 | 像"对讲机",两边都能说话 | @Componentstruct 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';
更多推荐



所有评论(0)