鸿蒙原生开发手记:徒步迹 - ArkTS 语法快速入门

发布时间:2026/9/28 13:32:36

鸿蒙原生开发手记:徒步迹 - ArkTS 语法快速入门
鸿蒙原生开发手记徒步迹 - ArkTS 语法快速入门掌握 ArkTS 核心语法为开发徒步迹打好语言基础一、前言ArkTS 是鸿蒙原生应用的主要开发语言它是 TypeScript 的超集在 TypeScript 的基础上增加了静态类型检查和声明式 UI 编程的支持。与标准的 TypeScript 相比ArkTS 有以下特点严格类型检查所有变量必须有明确的类型装饰器语法使用Component、State等装饰器来定义组件和状态数据绑定声明式 UI 与状态管理深度集成性能优化AOT 编译到原生机器码运行时零反射本文将结合徒步迹App 的实际需求快速带你掌握 ArkTS 的核心语法。二、变量与类型声明ArkTS 要求所有变量必须有明确的类型声明不支持隐式的any类型。2.1 基础类型// 数值类型letdistance:number5.2;// 徒步距离(km)letelevation:number300;// 爬升高度(m)letsteps:number8642;// 步数// 字符串类型letrouteName:string山野徒步路线;letdescription:string这是一条风景优美的路线;// 布尔类型letisRecording:booleanfalse;// 是否在记录中letisPublic:booleantrue;// 是否公开// 联合类型letstatus:idle|recording|paused|completedidle;2.2 数组与元组// 数组 - 存储轨迹点坐标letcoordinates:number[][116.397,39.908,116.398,39.909];letrouteNames:string[][路线A,路线B,路线C];// 泛型数组lettrackPoints:Arraynumber[];// 元组 - 固定长度和类型letcoordinatePair:[number,number][116.397,39.908];2.3 对象与接口使用interface定义数据模型这是 ArkTS 中最重要的类型定义方式interfaceHikingRoute{id:number;name:string;distance:number;duration:number;difficulty:简单|中等|困难;tags:string[];}// 使用接口letroute:HikingRoute{id:1,name:香山徒步,distance:8.5,duration:5400,// 秒difficulty:中等,tags:[森林,山景],};三、函数定义ArkTS 中的函数定义需明确参数类型和返回值类型// 基础函数functioncalculatePace(duration:number,distance:number):number{returnduration/distance;}// 箭头函数constformatDistance(meters:number):string{if(meters1000){return${(meters/1000).toFixed(2)}km;}return${Math.round(meters)}m;};// 可选参数functioncreateRoute(name:string,description?:string):HikingRoute{return{id:Date.now(),name:name,distance:0,duration:0,difficulty:简单,tags:[],};}// 使用letroute1createRoute(周末徒步);letroute2createRoute(越野训练,适合有经验者);四、类与装饰器ArkTS 中类的使用与传统 TypeScript 类似但加入了装饰器语法用于声明式 UI。4.1 普通类classRouteService{privateroutes:HikingRoute[][];addRoute(route:HikingRoute):void{this.routes.push(route);}getRouteById(id:number):HikingRoute|undefined{returnthis.routes.find(rr.idid);}gettotalDistance():number{returnthis.routes.reduce((sum,r)sumr.distance,0);}}// 使用constservicenewRouteService();service.addRoute(route1);console.log(service.totalDistance);4.2 组件装饰器这是 ArkTS 最核心的特性 - 用装饰器定义 UI 组件Componentstruct RouteCard{ProprouteName:string;Propdistance:number0;build(){Column(){Text(this.routeName).fontSize(16).fontWeight(FontWeight.Bold);Text(距离:${this.distance}km).fontSize(14).fontColor(#666);}.padding(12).backgroundColor(#FFF).borderRadius(8);}}五、控制流语句// if/elsefunctiongetDifficulty(distance:number):string{if(distance5){return简单;}elseif(distance15){return中等;}else{return困难;}}// for-of 循环推荐lettags:string[][森林,山景,溪流];for(lettagoftags){console.log(tag);}// forEachroutes.forEach((route,index){console.log(${index}:${route.name});});ArkTS 不支持for-in循环推荐使用for-of或数组方法。六、异步编程ArkTS 使用async/await处理异步操作与标准 TypeScript 一致// 模拟网络请求asyncfunctionfetchRoutes():PromiseHikingRoute[]{// 返回 PromisereturnnewPromise((resolve){setTimeout((){resolve([route1,route2]);},1000);});}// 使用 async/awaitasyncfunctionloadRoutes():Promisevoid{try{constroutesawaitfetchRoutes();console.log(加载了${routes.length}条路线);}catch(error){console.error(加载失败:,error);}}七、模块化ArkTS 使用import/export进行模块化管理// ---- models/Route.ets ----exportinterfaceHikingRoute{id:number;name:string;}exportfunctionformatRouteName(name:string):string{return徒步 -${name};}// ---- pages/RouteList.ets ----import{HikingRoute,formatRouteName}from../models/Route;constroute:HikingRoute{id:1,name:香山};console.log(formatRouteName(route.name));// 输出: 徒步 - 香山八、与 TypeScript 的主要区别特性TypeScriptArkTSany类型支持不支持unknown类型支持不支持as类型断言支持不支持用as T受限for-in支持不支持装饰器实验性原生支持声明式 UI无内置支持内置 ArkUI 框架JSDoc 类型注释支持不支持九、实战徒步迹数据模型结合徒步迹App我们定义核心数据模型// models/DataModels.etsexportinterfaceUser{id:number;nickname:string;avatar:string;phone:string;}exportinterfaceCoordinate{latitude:number;longitude:number;altitude:number;timestamp:number;}exportinterfaceRecording{id:number;name:string;startTime:number;endTime:number;distance:number;duration:number;calories:number;trackPoints:Coordinate[];status:idle|recording|paused|completed;}exportinterfaceTeam{id:number;name:string;memberCount:number;maxMembers:number;}// 工具函数exportfunctioncalculateDistance(coord1:Coordinate,coord2:Coordinate):number{constR6371000;// 地球半径constdLat(coord2.latitude-coord1.latitude)*Math.PI/180;constdLon(coord2.longitude-coord1.longitude)*Math.PI/180;constaMath.sin(dLat/2)*Math.sin(dLat/2)Math.cos(coord1.latitude*Math.PI/180)*Math.cos(coord2.latitude*Math.PI/180)*Math.sin(dLon/2)*Math.sin(dLon/2);constc2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));returnR*c;}这个数据模型将在后续所有页面开发中反复使用。十、总结通过本文我们学习了 ArkTS 的核心语法包括类型系统、函数、类、装饰器、异步编程和模块化等关键特性。与 TypeScript 相比ArkTS 更加严格但也更安全特别适合声明式 UI 开发。下一篇文章我们将学习 ArkUI 框架的基础组件开始构建徒步迹的用户界面。下一篇预告鸿蒙原生开发手记徒步迹 - ArkUI 声明式UI基础组件有任何疑问欢迎在评论区留言我们一起交流学习。

相关新闻

计算机网络 实验2:基于tcpdump与Wireshark的ICMP协议深度解析

计算机网络 实验2:基于tcpdump与Wireshark的ICMP协议深度解析

2026/8/24 7:24:40

1. ICMP协议基础与实验环境搭建ICMP(Internet Control Message Protocol)是TCP/IP协议族中不可或缺的组成部分,它就像网络世界的"信使",专门负责传递各种控制消息。当你在命令行敲下ping baidu.com时,屏幕上…

Obsidian五种同步策略详解:怎么根据设备角色设置仅发送、仅接收和双向同步

Obsidian五种同步策略详解:怎么根据设备角色设置仅发送、仅接收和双向同步

2026/9/27 9:53:12

Obsidian 多端同步时,很多用户会遇到一个共性问题:所有设备都在双向同步,每次打开都要等同步完成,手机上的误操作也可能影响主库。Nutstore Sync 同步插件已上线的同步策略功能,就是为解决这个问题设计的。它让你可以给…

《全域数学·工程应用大典》113–200讲完整总目录

《全域数学·工程应用大典》113–200讲完整总目录

2026/8/23 0:15:17

作者: 乖乖数学《全域数学工程应用大典》113–200讲完整总目录 全书总序: 93–100讲低维基础工程;101–200讲《全域统一场高阶拓展工程篇》 前置已有内容回顾: 1–100讲:三极本源数理、C60超导实验、真空能、反重力原型…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/28 4:08:17

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/28 3:14:54

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/28 3:58:00

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/28 3:47:14

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/28 5:05:21

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/26 23:35:16

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…