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

发布时间:2026/7/15 23:49:30

鸿蒙原生开发手记:徒步迹 - 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/7/15 23:39:30

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

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

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

2026/7/15 23:39:30

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

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

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

2026/7/15 23:39:30

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

普通人第一个Agent:从人肉流程到最小闭环的实战路径

普通人第一个Agent:从人肉流程到最小闭环的实战路径

2026/7/16 1:19:33

1. 为什么说“普通人第一个 Agent 不要从工具开始”是句大实话最近在几个技术社群里,几乎每天都能看到类似的问题:“想学 Agent,该先装 Ollama 还是直接上 LangChain?”、“有没有一键部署的开源 Agent 框架推荐?”、“…

小学生学C++编程语法知识(C++异常处理(Exception)入门)

小学生学C++编程语法知识(C++异常处理(Exception)入门)

2026/7/16 1:19:33

魔法城堡里的警报器——C异常处理(Exception)入门一、故事开始:程序王国的危险按钮1、在程序王国里,小Q是一名魔法程序员。一天,国王交给他一个任务:"请写一个计算除法的程序!"小Q很快…

三极管与MOS管:从“水龙头”到“电闸门”的实战选型指南

三极管与MOS管:从“水龙头”到“电闸门”的实战选型指南

2026/7/16 1:19:33

1. 从水龙头到电闸门:三极管与MOS管的本质区别我第一次接触电子元件时,老师用了一个特别形象的比喻:三极管就像家里厨房的水龙头,需要你持续用力拧动(电流驱动)才能控制水流大小;而MOS管则像卫生…

【RTOS的硬核内核】从CPU架构出发,彻底搞懂RTOS的调度与移植

【RTOS的硬核内核】从CPU架构出发,彻底搞懂RTOS的调度与移植

2026/7/16 1:19:33

1. RTOS与CPU架构的生死之交第一次接触RTOS时,很多人会疑惑:为什么同样的FreeRTOS代码,在STM32上跑得飞起,换到RISC-V芯片上就各种崩溃?这就像同样的菜谱,用电磁炉和煤气灶做出来的味道完全不同——火候控制…

维特智能上位机核心参数调优实战指南

维特智能上位机核心参数调优实战指南

2026/7/16 1:19:33

1. 维特智能上位机调优前的准备工作在开始参数调优之前,我们需要先做好基础准备工作。就像盖房子需要打地基一样,参数调优也需要先搭建好稳定的工作环境。我遇到过不少开发者一上来就直接修改参数,结果发现系统运行异常,最后不得不…

每天认识一种投资品类:保险

每天认识一种投资品类:保险

2026/7/16 1:09:33

文章目录1. 什么是保险?2. 保险的核心功能3. 保险的主要分类3.1 财产保险3.2 人身保险4. 保险 vs 其他投资品类5. 谁适合配置保险?6. 总结1. 什么是保险? 保险,是一种风险管理的财务安排。投保人向保险人支付保险费,当…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/16 0:35:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/15 0:26:43

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Python实现跨境电商商品图批量翻译教程

Python实现跨境电商商品图批量翻译教程

2026/7/16 0:09:31

一、问题引入做跨境电商的卖家朋友,你是否遇到过这样的困扰?每次上架新品到亚马逊、Shopee或Lazada等平台,都需要处理大量商品图片的多语言版本。比如上架200款衣服,每款需要翻译成英语、日语、韩语等5种语言,这意味着…

跨境电商多语言商品图翻译方案实现

跨境电商多语言商品图翻译方案实现

2026/7/16 0:09:31

一、问题引入对于做跨境电商的卖家来说,多语言商品图的制作一直是令人头疼的环节。当你准备在亚马逊、Shopee、Lazada等多个平台同步上架新品时,首先遇到的就是图片翻译问题。以一位做家居用品的卖家为例,他需要将200张商品图片中的英文文案全…

Windows系统文件d3dx9_36.dll丢失找不到问题解决

Windows系统文件d3dx9_36.dll丢失找不到问题解决

2026/7/16 0:09:31

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…