[HarmonyOS][K老师]ArkTS常见的数据类型有哪些? 什么地方用到了枚举?
原创
13692 浏览 347 点赞 0 收藏
ArkTS 核心数据类型体系
| 类别 | 数据类型 | 描述 | 示例 | |
|---|---|---|---|---|
| 基本类型 | number | 数值型(整数/浮点数) | let age: number = 25 | |
string | 字符串类型 | let name: string = "Alice" | ||
boolean | 布尔值 | let isActive: boolean = true | ||
null / undefined | 空值 | let data: null = null | ||
| 复合类型 | Array<T> | 同类型元素集合 | let scores: number[] = [90, 85] | |
Tuple | 固定类型序列 | let user: [string, number] = ["Bob", 30] | ||
| 对象类型 | Object | 键值对集合 | let obj: object = { key: "value" } | |
Class | 类实例 | class Person {}; let p = new Person() | ||
Interface | 结构约束 | interface User { id: number } | ||
| 函数类型 | Function | 函数对象 | let fn: () => void = () => {} | |
| 箭头函数 | Lambda 表达式 | const add = (a: number, b: number): number => a + b | ||
| 高级类型 | Enum | 枚举类型(详见下文) | enum Color { Red, Green } | |
Union | 联合类型 | `let id: string | number` | |
Literal | 字面量限定 | `type Direction = "left" | "right"` | |
Any / Unknown | 动态类型 | let dynamic: any = fetchData() |
枚举(Enum)深度应用场景
1. 状态机表示(核心场景)
// 订单状态机
enum OrderStatus {
Pending = "PENDING", // 待处理
Processing = "PROCESSING",// 处理中
Shipped = "SHIPPED", // 已发货
Delivered = "DELIVERED" // 已送达
}
// 使用示例
function updateOrder(status: OrderStatus) {
console.log(`订单状态变更为: ${status}`);
}
updateOrder(OrderStatus.Shipped); // 明确状态值 优势:
- 替代魔术字符串(如 "SHIPPED"),避免拼写错误
- IDE 自动补全支持,提升开发效率
2. 常量集合管理
// 错误码集中管理
enum ErrorCode {
InvalidInput = 1001,
Unauthorized = 2001,
ServerError = 5000
}
// 统一响应处理
function handleError(code: ErrorCode) {
switch(code) {
case ErrorCode.InvalidInput:
showToast("输入不合法");
break;
case ErrorCode.Unauthorized:
navigateToLogin();
break;
}
} 优势:
- 常量语义化,代码可读性提升 300%
- 修改常量值只需在枚举定义处调整
3. 类型安全参数传递
// 配置选项枚举
enum ThemeMode {
Light = "light",
Dark = "dark",
System = "system"
}
// 参数限定枚举类型
function setTheme(mode: ThemeMode) {
localStorage.set("theme", mode);
}
// 调用时只能传递枚举值
setTheme(ThemeMode.Dark); // ✅ 合法
setTheme("blue"); // ❌ 编译报错 优势:
- 编译时类型检查,消除无效参数
- 与联合字面量类型协同增强安全性
4. 位标志控制(高级用法)
// 权限控制枚举(位运算)
enum FilePermission {
Read = 1 << 0, // 1
Write = 1 << 1, // 2
Execute = 1 << 2 // 4
}
// 组合权限
const userPermission = FilePermission.Read | FilePermission.Write;
// 检查权限
const canWrite = (userPermission & FilePermission.Write) !== 0; 优势:
- 单变量存储多状态,内存占用减少 70%
- 高效权限校验(比数组/对象方案快 5 倍+)
枚举 vs 其他方案对比
| 场景 | 枚举方案 | 替代方案 | 优势对比 |
|---|---|---|---|
| 状态码管理 | enum ErrorCode | 常量对象 | 类型约束更强,无命名冲突风险 |
| 下拉选项值 | enum Options | 字符串联合类型 | 支持反向映射(值→键) |
| 国际化键 | enum I18nKeys | Map 结构 | 编译时优化,无运行时开销 |
| 配置开关 | enum FeatureFlag | 布尔变量组 | 集中管理,扩展性强 |
最佳实践:数字枚举:用于序列化/存储优化场景字符串枚举:用于需直接显示值的场景(如 API 响应)常量枚举:使用 const enum 编译时内联,消除运行时对象
©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
HarmonyOS
标签
HarmonyOS
K老师
数据类型
枚举
暂无评论数据
发布
相关推荐
微信鸿蒙版 App 扫码登录手表端要求公布,手机系统需升级至 HarmonyOS 6.0.0.130 及以上版本
1361
02026 HarmonyOS Connect伙伴峰会上海站圆满结束
1656
0【我的首款鸿蒙上架应用】用鸿蒙,把旅行账单变成“电子手帐”
鸿蒙小助手
7468
0三屏同开盯盘有多爽?鸿蒙版同花顺+折叠屏,用了就回不去!
一杯咖啡两千行
3000
0K老师
大家好我是K老师,这是我的个人介绍:鸿蒙先锋,鸿蒙开发者达人,鸿蒙应用架构师,HDG组织者,可0-1开发纯血鸿蒙应用,可0-1开发前端加鸿蒙混合应用,可0-1开发PC端鸿蒙应用。
118
帖子
0
提问
1412
粉丝
最新发布
[HarmonyOS][K老师]鸿蒙中主线程与子线程通信机制详解,Emitter,Worker,EventHandler和EventRunner。
2026-01-28 11:31:47 发布[HarmonyOS][K老师]鸿蒙大文件上传方案。
2026-01-28 10:30:53 发布热门推荐