【鸿蒙心迹】HarmonyOS学习笔记04:ArkTS变量与类型
🔥 个人主页: 杨利杰YJlio
❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》
《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》
🌟 让复杂的事情更简单,让重复的工作自动化


文章目录
前言:让变量表达工单数据
大家好,我是杨利杰 YJlio。
读完应用入口后,我开始给页面准备一条工单数据:标题是文本,重试次数是数字,是否解决是布尔值。这篇不追求一次掌握所有语法,先把变量的修改意图、类型标注和类型推导分清楚。
本文属于 HarmonyOS 7.0 学习笔记第 04 篇。示例用于练习,实际 DevEco Studio、SDK/API 与构建结果需要在本机填写;配图为知识示意图。
类型检查、外部数据校验和页面刷新是三件事,不能互相替代。
| 环境项 | 本次记录 |
|---|---|
| DevEco Studio | 待填写 |
| HarmonyOS SDK/API | 待填写 |
| 工程 | 现有 ArkTS 练习工程 |
| 目标 | 读懂字段类型,记录错误赋值诊断 |
一、先把字段与类型对应起来
我先用三个字段建立数据模型。它们的值只是练习数据,不能当成实际业务记录。

const title: string = '网络无法连接';
let retryCount: number = 0;
let isResolved: boolean = false;
retryCount += 1;
isResolved = true;
string 表达文本,number 表达数值,boolean 表达真假。标题写成字符串、次数写成数字,可以让声明直接说明用途。
number 本身并不保证“非负整数”。如果次数来自用户输入或网络,仍应检查它是否为整数、是否非负。静态类型只表达其中一层约束。
二、let 与 const:看绑定是否会重新赋值
我选择声明方式时,先判断变量是否需要重新赋值,而不是把两种写法随意混用。

| 写法 | 修改意图 | 示例 |
|---|---|---|
let | 绑定可以重新赋值 | 重试次数逐次增加 |
const | 绑定不能重新赋值 | 固定的工单标识 |
一个常见误会是把 const 理解为“所有内容都不能改”。对于对象,不能把这个绑定重新指向另一个对象,与不能修改对象属性是不同的限制。
const 约束绑定的重新赋值,不会自动冻结对象属性。
页面中需要显示并变化的数据,还要结合 ArkUI 状态机制。这里先学习普通变量,不预先给它添加响应式效果。
三、显式类型与类型推导怎么选
初始值清晰的局部变量,可以通过类型推导减少重复标注;需要表达业务边界时,我会把类型写出来。

const category = '网络';
let priority = 2;
priority = 3;
// priority = '高'; // 单独取消注释,记录实际诊断后撤销
省略类型标注不意味着允许任意类型。编译器会依据初始值进行推导;后续赋值仍要符合推导出的类型。
我会查看 IDE 的类型提示,再决定是否需要显式标注。跨文件使用的数据、函数参数和返回值,通常更值得把约束表达清楚。仅为消除报错而放宽类型,会掩盖真正的数据问题。
四、有限状态先用枚举表达
原稿用 TypeScript 字符串字面量联合类型描述状态。发布稿改用命名枚举示例,避免把一段 TS 写法直接宣称适用于所有 ArkTS 工具链。

enum TicketStatus {
New = 0,
Processing = 1,
Resolved = 2
}
let status: TicketStatus = TicketStatus.New;
status = TicketStatus.Processing;
枚举名称让状态含义更容易阅读。图中三个状态是可用名称,并未定义业务上的全部流转规则。
数字枚举值也不是外部数据验证器。服务端传来一个数字后,不能只把它标成 TicketStatus 就认定合法;仍需要根据协议检查取值。具体语法支持和诊断以当前 SDK 为准。
五、类型声明不会自动验证外部数据
我会把“工程内部的声明和赋值检查”与“外部数据进入程序时的检查”分开处理。

| 层次 | 本篇关注的内容 |
|---|---|
| 静态类型 | 变量声明、错误赋值、函数参数等约束 |
| 运行时检查 | 字段是否存在、值是否符合业务范围 |
| 数据转换 | 根据协议把外部值映射为内部模型 |
华为的ArkTS 语法适配背景介绍了强化静态检查和空安全的原因,也指出与 TS/JS 交互时可能绕过检查边界。
原稿将 any 描述成可用的宽泛类型,这容易让初学者误以为它是消除报错的通用办法。本篇不提供这类写法;遇到相关诊断,应检查真实数据结构、导入和当前语言约束。
类型标注不会替你检查网络响应、文件内容或用户输入。
六、用一个类组合工单字段
我把几个字段组织成一条工单,并给属性提供明确类型和初始值。示例仍需在实际工程中构建确认。

class TicketSummary {
id: string = 'T-1001';
title: string = '网络无法连接';
retryCount: number = 0;
isResolved: boolean = false;
status: TicketStatus = TicketStatus.New;
}
const sample: TicketSummary = new TicketSummary();
sample.retryCount += 1;
sample.status = TicketStatus.Processing;
这里沿用上一节的 TicketStatus 声明。sample 的绑定不变,属性仍可以更新,正好对应前面 const 的区别。
后续学习接口和类时,再比较它们各自负责什么。这一节只要求读懂字段与初始值,不把它包装成完整工单应用。
七、单独制造一次错误赋值
我会在独立练习文件中先构建正常示例,再只改一个赋值,保存诊断证据后撤销。

// 在正常示例之外逐项实验,不同时取消所有注释:
// sample.retryCount = '1';
// sample.isResolved = 'true';
// sample.title = 100;
- 保留已有模板,找到合适的逻辑文件或已有执行位置。
- 添加枚举、类与示例数据,按工程规则处理导出和调用。
- 先进行一次正常构建,保存结果。
- 每次只取消一条错误赋值的注释,记录文件位置和完整诊断。
- 撤销该修改,再次构建,确认没有把练习错误留下。
| 实验 | 实际诊断 | 撤销后构建 |
|---|---|---|
| 数字字段赋字符串 | 待填写 | 待填写 |
| 布尔字段赋字符串 | 待填写 | 待填写 |
| 文本字段赋数字 | 待填写 | 待填写 |
编辑器下划线属于诊断线索,不等于整个工程已经构建通过。
八、空值、类型和界面刷新别混淆
遇到“数据看起来对,但显示不对”的问题,我会先判断问题属于数据值、类型约束还是页面状态。

| 现象 | 阅读和排查方向 |
|---|---|
| 字符串为空 | 确认空字符串在业务中的含义 |
| 字段可能不存在 | 按协议表达可选值,并处理缺失情况 |
| 类型赋值错误 | 检查声明、推导类型与调用位置 |
| 改值后页面没刷新 | 检查当前 ArkUI 状态管理方式 |
空字符串是一个字符串值,缺失字段则是另一种状态;两者需要明确约定。普通变量变了,也不会自动成为页面响应式状态。后续状态管理章节会专门练习这一点。
学习总结
这篇我从工单字段出发,区分 let 与 const、显式类型与推导,再用命名枚举和一个类组合数据。最需要记住的是:类型表达数据约束,实际值还要检查,页面变化还要交给对应的状态机制。
发布前补齐工具版本与真实构建诊断。下一篇继续学习函数参数与返回值,把标题校验拆成可以明确调用的逻辑。
参考资料
声明:本文为学习示例与练习方法,配图为示意信息图;语法支持、诊断与构建结果以实际 DevEco Studio、SDK 和官方文档为准。

更多推荐



所有评论(0)