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' | '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
@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';
Logo

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

更多推荐