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

发布时间:2026/7/14 2:26:44

鸿蒙原生开发手机:徒步迹 - 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基础组件有任何疑问欢迎在评论区留言我们一起交流学习。

相关新闻

PyTorch到PyTorch Lightning迁移实战:训练循环抽象与生产化落地

PyTorch到PyTorch Lightning迁移实战:训练循环抽象与生产化落地

2026/7/14 2:26:44

1. 这不是“选哪个更好”的选择题,而是“什么时候该换挡”的实操指南我带过六支AI工程团队,从零搭建过三个工业级模型训练平台,也亲手把十多个学术项目从Jupyter Notebook里拖进生产环境。每次新人问我“PyTorch和PyTorch Lightning到底用哪个…

幻兽帕鲁风灵月影修改器正式版下载46项修改器

幻兽帕鲁风灵月影修改器正式版下载46项修改器

2026/7/14 2:26:44

下载链接:幻兽帕鲁风灵月影 一、 极致生存与探索体系(基础开局) 这套修改器能让玩家在帕鲁大陆横着走。无敌模式/无伤害判定、无限生命与无限护盾构筑了绝对的安全防线,彻底告别意外死亡;无限饱腹度、无限体力以及保持…

如何识别与规避高风险技术博客标题

如何识别与规避高风险技术博客标题

2026/7/14 2:16:43

我无法根据该标题生成符合要求的博文内容。原因如下:标题“I Saw Google Kingfall Think : And I Don’t Think I’m Ready for What’s Coming”不属于可落地、可复现、可验证的具体项目类型(如技术实现、手工制作、生活改造、职场工具流、创意实践等&a…

从OpenAI招股书到国内合规落地,ChatGPT商业模式画布必须重填的5个法律-技术耦合字段

从OpenAI招股书到国内合规落地,ChatGPT商业模式画布必须重填的5个法律-技术耦合字段

2026/7/14 15:17:42

更多请点击: https://kaifayun.com 第一章:ChatGPT商业模式画布的范式迁移与合规重定义 传统商业模式画布(Business Model Canvas)以客户细分、价值主张、渠道、客户关系等九大构造块为核心,而ChatGPT驱动的AI服务正推…

如何快速掌握Windows安卓应用安装:APK-Installer终极完整指南

如何快速掌握Windows安卓应用安装:APK-Installer终极完整指南

2026/7/14 15:17:42

如何快速掌握Windows安卓应用安装:APK-Installer终极完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经在Windows电脑上想安装安卓应用&am…

测试工程师最后的护城河:Copilot模板定制化开发指南(含AST解析+上下文注入+断言智能补全)

测试工程师最后的护城河:Copilot模板定制化开发指南(含AST解析+上下文注入+断言智能补全)

2026/7/14 15:17:42

更多请点击: https://kaifayun.com 第一章:测试工程师最后的护城河:Copilot模板定制化开发指南(含AST解析上下文注入断言智能补全) 在AI辅助编码日益普及的今天,测试工程师的核心竞争力正从“写更多用例”…

如何下载广西六蓝村高程并提取5米等高线

如何下载广西六蓝村高程并提取5米等高线

2026/7/14 15:17:42

近日,广西横州六蓝村遭遇特大洪水灾害牵动着无数人的心。 受极端暴雨影响,六蓝水库出现漫堤溃口,湍急的洪水席卷河谷村落,让所有人为之痛心,为之惋惜。 这场突如其来的灾害,是一场人力与天灾的博弈&#…

WPS AI智能公式与自动化流程构建:从Excel宏到自然语言指令的7类高危VBA场景平替方案

WPS AI智能公式与自动化流程构建:从Excel宏到自然语言指令的7类高危VBA场景平替方案

2026/7/14 15:17:42

更多请点击: https://codechina.net 第一章:WPS AI智能公式与自动化流程构建:从Excel宏到自然语言指令的7类高危VBA场景平替方案 在企业日常办公中,大量遗留VBA宏存在权限失控、代码不可审计、跨平台兼容性差等安全风险。WPS AI…

内存学习:页中断:fork、mmap背后的真相

内存学习:页中断:fork、mmap背后的真相

2026/7/14 15:07:41

引言这节课是对前面所有课程的一次总结和回顾。前面我们介绍了很多内存管理的相关机制,其实都是为了把这节课的故事讲完整。在前面的课程里,我们了解了进程内部的分布,但也留下了三个关键的问题没有讲清楚:fork 的工作方式非常奇怪…

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

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

2026/7/14 10:03: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/13 20:43:10

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

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

2026/7/14 0:06:37

1. 项目概述:当游戏语言成为一堵墙作为一名玩了十几年日系、欧美独立游戏的“老油条”,我太懂那种面对一款心仪已久、画风玩法都戳中G点的游戏,却因为语言不通而望而却步的痛了。尤其是那些基于Unity引擎开发的、体量不大但内容精良的作品&am…

2026普通文员学数据分析的价值

2026普通文员学数据分析的价值

2026/7/14 0:06:37

一、2026年普通文员学习数据分析的必要性随着数字化转型加速,数据分析技能正逐渐成为职场基础能力。普通文员学习数据分析可以提升工作效率、增强竞争力,并为职业转型提供更多可能性。二、数据分析对文员的价值自动化办公:通过数据分析工具&a…

2026从计划员到主管,生产管理者学数据分析有用吗?

2026从计划员到主管,生产管理者学数据分析有用吗?

2026/7/14 0:06:37

一、生产管理领域的职业发展路径 从计划员到主管的角色转变,是生产管理者职业发展的典型路径。计划员主要负责生产排程、库存管理和资源协调等基础工作,而主管则需要承担团队管理、决策支持和效率优化等更高级别的职责。这种转变不仅仅是职位的提升&…