HarmonyOS NEXT 开发之ArkTS基础入门
ArkTS 是 HarmonyOS NEXT 的开发语言,它基于 TypeScript 并进行了扩展和优化。以下是一些基础语法知识点、示例用法及注意事项。
一、ArkTS 简介
ArkTS 是一种基于 TypeScript 的编程语言,主要用于 HarmonyOS 应用的 UI 界面和业务逻辑开发。它在 TypeScript 的基础上,进行了一些针对 HarmonyOS 系统的优化和定制。
二、创建 ArkTS 项目
- 打开 DevEco Studio:点击 File -> New -> Project,选择适合的模板作为项目类型。
- 输入项目名称和包名:然后点击 Next。
- 完成项目创建:点击 Finish,DevEco Studio 将自动创建一个 ArkTS 项目。
三、编写 ArkTS 代码
- 编写 UI 界面:ArkTS 项目的 UI 界面使用 XML 文件定义,可以在
resources/base/layout目录下找到应用的布局文件。 - 编写业务逻辑:ArkTS 项目的业务逻辑代码使用 TypeScript 编写,可以在
src/main/js/default目录下找到应用的 TypeScript 代码。 - 添加资源文件:ArkTS 项目的图片、字符串等资源文件存放在
resources/base目录下。 - 配置文件:ArkTS 项目的配置信息存放在
config.json文件中。
四、ArkTS 关键语法和使用示例
1. 类型注解
类型注解是 TypeScript 的核心特性之一,它允许在变量、函数参数和函数返回值上添加类型信息。
let message: string = "Hello, HarmonyOS";
let count: number = 10;
function greet(name: string): string {return `Hello, ${name}`;
}
let greeting: string = greet("HarmonyOS");
2. 接口
接口是 TypeScript 中定义复杂类型的一种方式,它可以描述一个对象的结构。
interface Person {name: string;age: number;
}
function showPersonInfo(person: Person) {console.log(`Name: ${person.name}, Age: ${person.age}`);
}
let person: Person = { name: "John", age: 30 };
showPersonInfo(person);
3. 类
类是 TypeScript 中定义对象类型的一种方式,支持继承和多态。
class Animal {constructor(public name: string) {}speak() {console.log(`${this.name} makes a noise.`);}
}class Dog extends Animal {speak() {console.log(`${this.name} barks.`);}
}let dog = new Dog("Bingo");
dog.speak(); // Bingo barks.
4. 继承
继承允许一个类(子类)继承另一个类(父类)的属性和方法。
class Base {commonMethod() {console.log("Common Method");}
}class Derived extends Base {derivedMethod() {console.log("Derived Method");}
}let derived = new Derived();
derived.commonMethod(); // Common Method
derived.derivedMethod(); // Derived Method
5. 泛型
泛型允许在定义函数、接口或类时使用类型参数。
function identity<T>(arg: T): T {return arg;
}let output = identity<string>("Hello, world!");
console.log(output); // "Hello, world!"
6. 模块
模块是 TypeScript 中组织代码的一种方式,支持导入和导出。
// file1.ts
export function sayHello(name: string) {console.log(`Hello, ${name}`);
}// file2.ts
import { sayHello } from "./file1";
sayHello("TypeScript");
7. 装饰器
装饰器是一种特殊类型的声明,它可以被附加到类、方法、属性或参数上。
function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {console.log(`Property ${propertyKey} is being called`);
}class Person {@logname() {return "John";}
}let person = new Person();
person.name(); // Property name is being called
8. 异步编程
异步编程允许你编写非阻塞的代码。
async function fetchData() {return await fetch("https://api.example.com/data");
}fetchData().then(data => console.log(data));
9. 类型别名
类型别名允许你为类型定义一个新名称。
type Name = string;
type Coordinates = { x: number; y: number };let name: Name = "Alice";
let coordinates: Coordinates = { x: 10, y: 20 };
10. 类型保护
类型保护是一种检查变量类型的方法,可以在编译时确保变量具有正确的类型。
type Shape = Circle | Square;
function getArea(shape: Shape): number {if (shape instanceof Circle) {return Math.PI * shape.radius ** 2;} else {return shape.width * shape.height;}
}
11. 枚举
枚举是一种特殊的类型,它允许你为一组有限的值定义友好的名字。
enum Direction {Up,Down,Left,Right,
}function move(direction: Direction): void {console.log(`Moving in direction: ${Direction[direction]}`);
}
move(Direction.Up);
12. 映射类型
映射类型允许你根据现有类型创建新的类型。
type ReadonlyPoint = Readonly<Point>;
let readonlyPoint: ReadonlyPoint = { x: 10, y: 20 };
readonlyPoint.x = 30; // Error: Cannot assign to 'x' because it is a read-only property
五、注意事项
- 类型检查:ArkTS 在编译时进行类型检查,可以在代码运行前发现和修复错误。
- IDE 支持:由于有了类型信息,IDE 可以提供更好的自动完成、导航和重构功能。
- 模块化编程:ArkTS 支持模块化编程,可以将代码组织成模块,以便于管理和维护。
通过以上示例和注意事项,你可以更好地理解和掌握 ArkTS 的基础语法和使用方式。
相关文章:
HarmonyOS NEXT 开发之ArkTS基础入门
ArkTS 是 HarmonyOS NEXT 的开发语言,它基于 TypeScript 并进行了扩展和优化。以下是一些基础语法知识点、示例用法及注意事项。 一、ArkTS 简介 ArkTS 是一种基于 TypeScript 的编程语言,主要用于 HarmonyOS 应用的 UI 界面和业务逻辑开发。它在 Type…...
UE5 C++跑酷练习(Part2)
一.首先GameMode里有Actor数组,组装直线路,和左右路 #include "CoreMinimal.h" #include "GameFramework/GameModeBase.h" #include "RunGANGameMode.generated.h"UCLASS(minimalapi) class ARunGANGameMode : public AG…...
从0开始搭建vue + flask 旅游景点数据分析系统(二):搭建基础框架
这一期目标是把系统的布局给搭建起来,采用一个非常简单的后端管理风格,可以参考官方的页面 https://element.eleme.cn/#/zh-CN/component/container 下面我们开始搭建,首先,安装一下vue-router,element-ui npm insta…...
【过滤器 vs 拦截器】SpringBoot中过滤器与拦截器:明智选择的艺术(如何在项目中做出明智选择)
文章目录 SpringBoot 过滤器 vs 拦截器过滤器 (Filter)定义特点使用场景实现步骤创建过滤器类注册过滤器(可选,如果不使用 WebFilter 注解) 拦截器 (Interceptor)定义特点使用场景实现步骤创建拦截器类注册拦截器 过滤器与拦截器的比较实际项…...
2024-06学习笔记
1.事务与数据库链接的占用 如果用Transactional注解,那在第一次与数据库交互的时候,就会打开数据库链接,再整个方法执行完,才会关闭数据库链接。 即使后边用的事务传播是required_new,那之前的事务也是被挂起,不会被…...
【VUE】封装一个追随鼠标的漂浮组件框架
红色箭头代表鼠标位置,蓝色区域跟随鼠标出现,鼠标进行其他操作的时候,蓝色区域隐藏。 vue全码 <template><divmousemove"updatePosition"mouseleave"hideDiv"class"container":style"{ positi…...
mapstruct与lombok结合使用
问题 如果同时使用mapstruct与lombok,需要多添加一个lombok支持mapstruct的依赖库。 解决 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId> </dependency><dependency><groupId&…...
【SpringBoot】Web开发之URL映射
RequestMapping("/getDataById/{id}") public String getDataById(PathVariable("id") Long id){ return "getDataById:"id; }46 如果URL中的参数名称与方法中的参数名称一致,则可以简化为: RequestMapping("/get…...
对递归的一些理解。力扣206题:翻转链表
今天在刷力扣的时候,在写一道翻转链表的题目的过程中,在尝试使用递归解决该问题的时候,第一版代码却每次都返回的是null,这个错误让我尝试去debug了一下,最终找出了问题,并且让我对递归有了一些更深的理解&…...
Kafka面试三道题
针对Kafka的面试题,从简单到困难,我可以给出以下三道题目: 1. Kafka的基本概念与优势 问题:请简要介绍Kafka是什么,并说明它相比传统消息队列的优势有哪些? 答案: Kafka定义:Apa…...
C/C++编程-算法学习-数字滤波器
数字滤波器 一阶低通滤波器结论推导11. 基本公式推导2. 截止频率 和 采样频率 推导 实现 二阶低通滤波器实现1实现2 一阶低通滤波器 结论 其基本原理基于以下公式: o u t p u t [ n ] α ∗ i n p u t [ n ] ( 1 − α ) ∗ o u t p u t [ n − 1 ] output[n] …...
maven介绍 搭建Nexus3(maven私服搭建)
Maven是一个强大的项目管理工具,它基于项目对象模型(POM:Project Object Model)的概念,通过XML格式的配置文件(pom.xml)来管理项目的构建 Maven确实可以被视为一种工程管理工具或项目自动化构…...
电商项目之如何判断线程池是否执行完所有任务
文章目录 1 问题背景2 前言3 4种常用的方法4 代码4.1 isTerminated()4.2 线程池的任务总数是否等于已执行的任务数4.3 CountDownLatch计数器4.4 CyclicBarrier计数器 1 问题背景 真实生产环境的电商项目,常使用线程池应用于执行大批量操作达到高性能的效果。应用场景…...
【前端 15】Vue生命周期
Vue生命周期 在Vue.js中,了解组件的生命周期对于开发者来说是至关重要的。Vue的生命周期指的是Vue实例从创建到销毁的一系列过程,每个阶段都对应着特定的生命周期钩子(或称为生命周期方法),允许我们在不同的时间点加入…...
PCIe总线-Linux内核PCIe软件框架分析(十一)
1.简介 Linux内核PCIe软件框架如下图所示,按照PCIe的模式,可分为RC和EP软件框架。RC的软件框架分为五层,第一层为RC Controller Driver,和RC Controller硬件直接交互,不同的RC Controller,其驱动实现也不相…...
视觉SLAM第二讲
SLAM分为定位和建图两个问题。 定位问题 定位问题是通过传感器观测数据直接或间接求解位置和姿态。 通常可以分为两类:基于已知地图的定位和基于未知地图的定位。 基于已知地图的定位 利用预先构建的地图,结合传感器数据进行全局定位。SLAM中的全局…...
mysql1055报错解决方法
目录 一、mysql版本 二、 问题描述 三、解决方法 1.方法一(临时) 2.方法二(永久) 一、mysql版本 mysql版本:5.7.23 二、 问题描述 在查询时使用group by语句,出现错误代码:1055…...
Java的@DateTimeFormat注解与@JsonFormat注解的使用对比
Java的DateTimeFormat注解与JsonFormat注解的使用对比 在Java开发中,处理日期和时间格式时,我们经常会使用到DateTimeFormat和JsonFormat注解。这两个注解主要用于格式化日期和时间,但在使用场景和功能上有所不同。本文将详细介绍这两个注解…...
德国云手机:企业移动办公解决方案
在现代商业环境中,移动办公已经成为一种趋势。德国云手机作为一种高效的解决方案,为企业提供了强大的支持。本文将探讨德国云手机如何优化企业的移动办公环境。 一、德国云手机的主要优势 高灵活性 德国云手机具有高度的灵活性,能够根据用户需…...
【React】useState:状态管理的基石
文章目录 一、什么是 useState?二、useState 的基本用法三、useState 的工作原理四、高级用法五、最佳实践 在现代前端开发中,React 是一个非常流行的库,而 useState 是 React 中最重要的 Hook 之一。useState 使得函数组件能够拥有自己的状态…...
基于大语言模型的塔罗牌AI解读系统:技术架构与实现详解
1. 项目概述:当塔罗占卜遇见AI最近在GitHub上看到一个挺有意思的项目,叫“chatgpt-tarot-divination”。光看名字,你大概就能猜到它的核心玩法:用AI来解读塔罗牌。这可不是简单的“随机抽牌固定释义”,而是结合了像Cha…...
AgenticHub:构建AI智能体的开源框架与核心架构解析
1. 项目概述:AgenticHub是什么,以及它为何值得关注 最近在AI应用开发领域,一个名为“AgenticHub”的开源项目在GitHub上引起了不小的讨论。这个由victordedomenico发起的项目,定位非常清晰:它旨在成为一个构建、编排和…...
CubeMX默认配置的坑:STM32 LPUART的ORE溢出错误如何彻底解决(从寄存器到HAL库的避坑指南)
STM32 LPUART的ORE溢出错误:从硬件机制到HAL库的深度解决方案 当你在深夜调试STM32的LPUART接口时,突然发现串口"神秘"地停止了响应——这种场景对于经验丰富的嵌入式工程师来说并不陌生。问题的根源往往指向那个容易被忽视的Overrun Error&am…...
【51单片机】直流电机PWM调速实战:从驱动电路到闭环控制
1. 直流电机驱动基础与硬件选型 第一次玩直流电机时,我直接拿杜邦线把电机接在51单片机的IO口上,结果电机纹丝不动,还差点烧了芯片。这个教训让我明白:驱动电路是电机控制的第一道门槛。常见的直流电机工作电压通常在3-6V…...
GUID partition table, GPT 磁盘分区表
GPT分割表 LBA0 (MBR 兼容区块) 与 MBR 模式相似的,这个兼容区块也分为两个部份,一个就是跟之前 446 bytes 相似的区块,存储了第一阶段的开机管理程式! 而在原本的分割表的纪录区内,这个兼容模式仅放入一个特殊标志的分割,用来表示此磁盘为 GPT 格式之意。而不懂 GPT 分割…...
被本科论文困在毕业季?Paperxie 智能写作,帮你把 “论文大山” 拆成可走的台阶
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能格式排版/文献综述/AI PPThttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 毕业季的脚步越来越近,你的 Word 文档里,是不是还只有孤零零的标题和反复删改的引言…...
2026年写作类国际竞赛都有哪些?留学背景提升首选赛事全解析
AI 问答摘要块 Q:2026 年写作类国际竞赛都有哪些? A:2026 年值得参加的高含金量国际写作竞赛主要包括:1. Cosmopolitan Writing Award(CWA)(全球首创 AI 评审机制,全年龄段覆盖,留学背景提升首选…...
同态加密优化与安全字符串匹配技术解析
1. 同态加密与安全字符串匹配技术概述在现代数据隐私保护领域,同态加密(Homomorphic Encryption, HE)技术因其独特的"加密数据可计算"特性而备受关注。这项技术允许第三方在不解密的情况下对加密数据进行特定计算,计算结果解密后与对明文直接计…...
【开源】电商运营场景的 Agent :EcomPilot经营诊断神器 附github
github地址 https://github.com/baibai-awd/ecommerce-ops-agent一个面向电商运营场景的 Agent 项目:EcomPilot 电商经营诊断 Agent。这个项目不是简单的聊天机器人,而是围绕真实业务流程设计的智能分析系统。它可以自动读取电商运营数据,分析…...
MATLAB imagesc保姆级教程:从单一热图到多图排版,附完整代码
MATLAB imagesc全攻略:从热图绘制到高级排版实战 在数据科学和工程领域,可视化是理解复杂矩阵数据不可或缺的一环。MATLAB作为技术计算领域的标杆工具,提供了imagesc这一强大的矩阵可视化函数,能够将抽象的数字矩阵转化为直观的热…...
