鸿蒙ArkTS语言基础语法详解
文章目录
- 鸿蒙ArkTS语言基础语法详解
- 一、引言
- 二、ArkTS语言概述
- 1. ArkTS语言特点
- 2. TypeScript基础语法
- 2.1 类型注解
- 2.2 接口
- 2.3 泛型
- 2.4 类的继承
- 2.5 类的访问修饰符
- 三、ArkTS的基本组成
- 3.1 装饰器
- 3.2 UI描述
- 3.3 自定义组件
- 3.4 系统组件
- 3.5 属性方法和事件方法
- 四、自定义组件
- 4.1 build()函数
- 4.2 生命周期
- 五、装饰函数
- 5.1 @Builder装饰器
- 5.2 @BuilderParam装饰器
- 5.3 @Styles装饰器
- 5.4 @Extend装饰器
- 六、多态样式
- 6.1 基本使用
- 6.2 @Styles和stateStyles联合使用
- 6.3 stateStyles里使用常规变量和状态变量
- 七、总结
鸿蒙ArkTS语言基础语法详解
一、引言
鸿蒙操作系统(HarmonyOS)的ArkTS语言是一种基于TypeScript开发的语言,专为HarmonyOS系统开发而设计。ArkTS结合了JavaScript的灵活性和TypeScript的严谨性,使得开发者能够快速、高效地开发出高质量的HarmonyOS应用程序。本文将详细介绍ArkTS语言的基本语法和特点。
二、ArkTS语言概述

1. ArkTS语言特点
ArkTS语言具有以下特点:
- 静态类型检查:通过类型注解进行类型检查,减少因类型错误导致的bug。
- 异步/同步编程:支持基于Promise和async/await的异步/同步编程方式。
- 内置模块:内置常用模块,如文件系统、网络请求、图形渲染等。
- 兼容性:使用TypeScript语法,与JavaScript代码无缝集成,可编译成JavaScript代码在其他平台运行。
2. TypeScript基础语法
TypeScript是JavaScript的超集语言,支持静态类型,提高代码的可维护性和可读性。TypeScript代码可在编译时转换成JavaScript代码,在浏览器和Node.js环境下运行。
2.1 类型注解
TypeScript通过类型注解实现静态类型检查:
let name: string = "TypeScript";
function add(a: number, b: number): number {return a + b;
}
2.2 接口
接口描述对象的形状,包括属性和方法的类型:
interface Person {name: string;age: number;sayHello(): void;
}
let tom: Person = {name: "Tom",age: 18,sayHello: function() {console.log(`Hello, my name is ${this.name}!`);}
};
2.3 泛型
泛型允许编写参数化类型,提高代码的通用性和可读性:
function identity<T>(arg: T): T {return arg;
}
let output = identity<string>("TypeScript");
console.log(output); // 输出 TypeScript
2.4 类的继承
TypeScript支持类的继承,实现代码的重用和扩展:
class Animal {name: string;constructor(name: string) {this.name = name;}move(distance: number = 0) {console.log(`${this.name} moved ${distance}m.`);}
}
class Dog extends Animal {bark() {console.log("Woof! Woof!");}
}
let dog = new Dog("Bobby");
dog.move(10);
dog.bark();
2.5 类的访问修饰符
访问修饰符控制类的属性和方法的访问权限:
class Person {protected name: string;constructor(name: string) {this.name = name;}protected sayHello() {console.log(`Hello, I'm ${this.name}.`);}
}
class Student extends Person {constructor(name: string) {super(name);}public sayHelloToTeacher(teacher: Person) {console.log(`Hello, ${teacher.name}, I'm ${this.name}.`);}
}
let tom = new Student("Tom");
let bob = new Person("Bob");
tom.sayHelloToTeacher(bob);
bob.sayHello();
三、ArkTS的基本组成
ArkTS的基本组成包括装饰器、UI描述、自定义组件、系统组件、属性方法和事件方法。ArkTS扩展了多种语法范式,如@Builder/@BuilderParam、@Extend/@Style和stateStyles,以使开发更加便捷。
3.1 装饰器
装饰器用于装饰类、结构、方法以及变量,并赋予其特殊的含义。例如,@Entry、@Component和@State都是装饰器。
3.2 UI描述
UI描述以声明式的方式来描述UI的结构,例如build()方法中的代码块。
3.3 自定义组件
自定义组件是可复用的UI单元,可组合其他组件。
3.4 系统组件
ArkUI框架中默认内置的基础和容器组件,可直接被开发者调用。
3.5 属性方法和事件方法
组件可以通过链式调用配置多项属性和设置多个事件的响应逻辑。
四、自定义组件
自定义组件基于struct实现,struct + 自定义组件名 + {…}的组合构成自定义组件。对于struct的实例化,可以省略new。
4.1 build()函数
build()函数用于定义自定义组件的声明式UI描述,自定义组件必须定义build()函数。
@Component
struct HelloComponent {@State message: string = 'Hello, World!';build() {Row() {Text(this.message).onClick(() => {this.message = 'Hello, ArkUI!';})}}
}
@Entry
@Component
struct ParentComponent {build() {Column() {Text('ArkUI message')HelloComponent({ message: 'Hello, World!' });Divider()HelloComponent({ message: '你好!' });}}
}
4.2 生命周期
页面生命周期和组件生命周期提供了多个生命周期接口,如onPageShow、onPageHide、onBackPress、aboutToAppear和aboutToDisappear。
五、装饰函数
5.1 @Builder装饰器
@Builder主要是定义页面UI,可以装饰指向自定义组件内自定义构建函数或全局函数。
5.2 @BuilderParam装饰器
@BuilderParam用来装饰指向@Builder方法的变量,为自定义组件增加特定的功能。
5.3 @Styles装饰器
@Styles装饰器主要是定义公共样式,可以装饰指向全局或组件内。
5.4 @Extend装饰器
@Extend用于扩展原生组件样式,作用和@Styles差不多,但@Extend仅支持定义在全局。
六、多态样式
stateStyles是属性方法,可以根据UI内部状态来设置样式,类似于css伪类,但语法不同。ArkUI提供以下四种状态:focused、normal、pressed和disabled。
6.1 基本使用
@Entry
@Component
struct CompWithInlineStateStyles {@State focusedColor: Color = Color.Red;normalColor: Color = Color.Greenbuild() {Column() {Button('clickMe').height(100).width(100).stateStyles({normal: {.backgroundColor(this.normalColor)},focused: {.backgroundColor(this.focusedColor)}}).onClick(() => {this.focusedColor = Color.Pink}).margin('30%')}}
}
6.2 @Styles和stateStyles联合使用
@Entry
@Component
struct MyComponent {@Styles normalStyle() {.backgroundColor(Color.Gray)}@Styles pressedStyle() {.backgroundColor(Color.Red)}build() {Column() {Text('Text1').fontSize(50).fontColor(Color.White).stateStyles({normal: this.normalStyle,pressed: this.pressedStyle,})}}
}
6.3 stateStyles里使用常规变量和状态变量
@Entry
@Component
struct CompWithInlineStateStyles {@State focusedColor: Color = Color.Red;normalColor: Color = Color.Greenbuild() {Button('clickMe').height(100).width(100).stateStyles({normal: {.backgroundColor(this.normalColor)},focused: {.backgroundColor(this.focusedColor)}}).onClick(() => {this.focusedColor = Color.Pink}).margin('30%')}
}
七、总结
ArkTS语言作为HarmonyOS优选的主力应用开发语言,继承了TypeScript的所有特性,并在此基础上做了进一步扩展。通过掌握ArkTS的基础语法和特性,开发者可以更高效地开发HarmonyOS应用程序。
版权声明:本博客内容为原创,转载请保留原文链接及作者信息。
参考文章:
- 鸿蒙next版开发:初识ArkTS语言(基本语法)
相关文章:
鸿蒙ArkTS语言基础语法详解
文章目录 鸿蒙ArkTS语言基础语法详解一、引言二、ArkTS语言概述1. ArkTS语言特点2. TypeScript基础语法2.1 类型注解2.2 接口2.3 泛型2.4 类的继承2.5 类的访问修饰符 三、ArkTS的基本组成3.1 装饰器3.2 UI描述3.3 自定义组件3.4 系统组件3.5 属性方法和事件方法 四、自定义组件…...
H5游戏出海如何获得更多增长机会?
海外H5小游戏的崛起给了国内众多中小厂商出海发展的机会,开发者如何在海外市场获得更多的增长机会?#APP出海# H5游戏如何在海外获得核心用户? HTML5游戏的开发与运营者们首先可以利用量多质高的HTML5游戏,维持海外用户粘性&…...
Cmake+基础命令
一、版本要求: 检查 cmake 版本号的最低要求,不满足条件时报错。 cmake_minimum_required(VERSION <version>)参数: version:最低要求的版本号 例子: # 最低要求安装3.21版本的cmake cmake_minimum_required…...
python数据分析之爬虫基础:requests详解
1、requests基本使用 1.1、requests介绍 requests是python中一个常用于发送HTTP请求的第三方库,它极大地简化了web服务交互的过程。它是唯一的一个非转基因的python HTTP库,人类可以安全享用。 1.2、requests库的安装 pip install -i https://pypi.tu…...
PHP期末复习(通过30道填空题梳理知识点)
一、基本语法 PHP的开始标记是: <?php<?php 是PHP脚本的开始标签,所有PHP代码必须在这个标签内书写。 PHP文件的结束标记是: ?>?> 是PHP脚本的结束标签,在大多数PHP文件中,通常可以省略结束标记。 定…...
PostgreSQL 安装部署系列:使用YUM 方式在Centos 7.9 安装指定 PostgreSQL -15版本数据库
一、前言 千里之行始于足下,想学习一门数据库,首先要从安装部署开始,先拥有一套属于自己的学习测试库。为了更好的学习该数据库,可以选择一个在企业界使用率比较普及的操作系统,选择稳定版本的操作系统;如果…...
知识图谱8:深度学习各种小模型
1、知识图谱的展示有很多工具 Neo4j Browser - - - - 浏览器版本 Neo4j Desktop - - - - 桌面版本 graphX - - - - 可以集成到Neo4j Desktop Neo4j 提供的 Neo4j Bloom 是用户友好的可视化工具,适合非技术用户直观地浏览图数据。Cypher 是其核心查询语言…...
为什么 JavaScript 中的 `new` 运算符报错?
在 JavaScript 中,new 运算符通常用于创建一个新对象并调用构造函数来初始化对象。然而,new 运算符可能会引发一些错误,通常是由于以下原因导致的: 构造函数没有正确的定义: 如果使用 new 运算符调用的函数没有正确地定…...
Tomcat,javaweb, servlet , springBoot
在server.xml里配置服务器 <scope>provided</scope>打包的时候,这个jar包不会被打进去,因为tomcat已将封装了这个jar包,没必要要这个...
使用Kimi开发自己的问答应用
概述 Kimi是大家常用的一个人工智能助手,本文使用Kimi开发文档,以node作为后端,开发与一个问答系统 实现效果 Kimi简介 Kimi是由Moonshot AI开发的人工智能助手,擅长中文和英文对话。目标是帮助用户解决问题、提供信息和执行任…...
TypeScript进阶
Typescript进阶 基础知识 JavaScript 的核心特点就是灵活,但随着项目规模的增大,灵活反而增加开发者的心智负担。例如在代码中一个变量可以被赋予字符串、布尔、数字、甚至是函数,这样就充满了不确定性。而且这些不确定性可能需要在代码运行…...
jenkins邮件的配置详解
Jenkins邮件的配置涉及多个步骤和细节,以下是详细的配置指南: 一、前期准备 确定邮件服务:明确Jenkins将要使用的邮件服务,如QQ邮箱、163邮箱、公司邮箱(基于Microsoft 365或Exchange Server)等。获取SMTP配置信息:根据邮件服务类型,获取相应的SMTP服务器地址、端口号…...
小皮面板(PHPSTUDY)配置多个域名或IP
问题描述 小皮面板默认采用nginx的静态部署,按照使用nginx的习惯只需要额外添加一个server即可,但是会发现直接往配置文件里添加新的server是不生效的,小皮的官网论坛几乎已经停止维护,因此资料较少,原本也没有仔细使…...
【大语言模型】LangChain LCEL 表达式语言
【大语言模型】LangChain LCEL 表达式语言 一、简介二、LCEL的优势三、LCEL 的基本使用1、Runnable 对象 四、实战实例 一、简介 LangChain LCEL 的全称为 LangChain Expression Language 即可直译为 LangChain 表达式。 为了构造更复杂的 LLM 应用并且更为简便快捷的构造 LLM…...
Leetcode 3382. Maximum Area Rectangle With Point Constraints II
Leetcode 3382. Maximum Area Rectangle With Point Constraints II 1. 解题思路2. 代码实现 题目链接:3382. Maximum Area Rectangle With Point Constraints II 1. 解题思路 这一题是题目3380. Maximum Area Rectangle With Point Constraints I的进阶版&#…...
MitelMiCollab 身份绕过导致任意文件读取漏洞复现(CVE-2024-41713)
0x01 产品描述: Mitel MiCollab 是一个企业协作平台,它将各种通信工具整合到一个应用程序中,提供语音和视频通话、消息传递、状态信息、音频会议、移动支持和团队协作功能。0x02 漏洞描述: Mitel MiCollab 的 NuPoint 统一消息 (NPM) 组件中存在身份验证绕过漏洞,由于输入…...
DVWA 靶场 SQL 注入报错 Illegal mix of collations for operation ‘UNION‘ 的解决方案
在 dvwa 靶场进行联合 SQL 注入时,遇到报错 Illegal mix of collations for operation UNION报错如下图: 解决办法: 找到文件MySQL.php 大致位置在dvwaincludesDBMS 目录下 使用编辑器打开 检索$create_db 第一个就是 在{$_DVWA[ ‘db_d…...
京准电钟分享:医院网络内NTP时间同步服务器作用是什么?
京准电钟分享:医院网络内NTP时间同步服务器作用是什么? 京准电钟分享:医院网络内NTP时间同步服务器作用是什么? 时间同步技术必定将是整个大数据处理系统的重要支撑和保障。时间同步技术使数据产生与处理系统的所有节点具有全局…...
HTML DOM API
HTMLInputElement HTMLInputElement 接口提供了特定的属性和方法,用于管理 <input> 元素的选项、布局和外观。 HTMLInputElement 和 <input> 之间的关系可以理解为接口与具体元素的关系: <input> 元素: <input> 是…...
java时间处理SimpleDateFormat详解
文章目录 常用构造函数日期格式模式常见用法1. 格式化日期2. 解析日期字符串 注意事项示例扩展:指定区域和时区 SimpleDateFormat 是 Java 中用于日期和时间格式化的类,属于 java.text 包。它允许开发者将日期对象格式化为字符串,或者将字符…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
