news 2026/5/23 16:06:31

HarmonyOS应用开发实战(基础篇)Day01-《ArkTS基本知识》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS应用开发实战(基础篇)Day01-《ArkTS基本知识》

ArkTS基本知识

  • 1、ArkTS语言特点
    • 1.1、对象字面量必须标注类型
    • 1.2、不支持 Structural Typing(结构化类型)
  • 2、ArkTS基本数据类型
    • 2.1、number 类型
    • 2.2、boolean 类型
    • 2.3、string 类型
  • 3、高级数据类型
    • 3.1、枚举类型
    • 3.2、联合类型
    • 3.3、数组类型
  • 4、运算符
    • 4.1、赋值运算符
    • 4.2、比较运算符
    • 4.3、位运算符
    • 4.4、逻辑运算符
    • 4.5、算术运算符
  • 5、语句
    • 5.1、条件语句
    • 5.2、循环语句(for)
    • 5.3、while 语句
    • 5.4、throw 和 try 语句
    • 5.5、switch 语句
  • 代码部分

1、ArkTS语言特点

参考文档:ArkTS语言介绍

1.1、对象字面量必须标注类型

为了清晰展示 ArkTS(ETS)与 TypeScript(TS)之间的差异,我分别创建了两个文件进行演示。

在两个文件中均输入如下代码:

conststu={name:'zhangsan',age:19}

可以看到,在 ArkTS 中出现了报错,提示需要显式声明类型:

而在 TypeScript 中,相同代码则不会报错:

因此,在 ArkTS 中,必须为对象字面量显式声明类型,例如:

1.2、不支持 Structural Typing(结构化类型)

我们再通过一段代码来验证这一点:

interfaceAni{name:string,age:number,}functiongetName(obj:Ani){returnobj.name;}constani={name:'zhangsan',age:18,gender:'男'};getName(ani);

在 TypeScript 中,即使传入的对象包含额外属性(如gender),只要满足接口定义的必要字段,就不会报错:

但在 ArkTS 中,同样的代码会报错:

这是因为 ArkTS 不支持 structural typing(鸭子类型),要求对象的类型必须严格匹配。因此,我们需要将接口扩展以包含所有实际使用的属性(此处为了避免命名冲突,已将接口名改为大写):


2、ArkTS基本数据类型

2.1、number 类型

2.2、boolean 类型

boolean类型仅有两个逻辑值:truefalse,通常用于条件判断语句中。

2.3、string 类型

string类型表示字符序列,支持使用转义字符。字符串字面量可以用单引号(')、双引号(")或反引号(`)定义。其中,反引号用于定义模板字符串,支持嵌入表达式。

示例代码如下:

@Entry@Componentstruct Index{build(){Column(){Button('数字类型').onClick(()=>{letn1=3.14;letn2=3.141592;letn3=0.5;letn4=1e2;console.log('数字类型',n1);console.log('数字类型',n2);console.log('数字类型',n3);console.log('数字类型',n4);})Button('布尔类型').onClick(()=>{letisFDone:boolean=false;letisTDone:boolean=true;console.log('布尔类型',isFDone);console.log('布尔类型',isTDone);})Button('字符串类型').onClick(()=>{lets1='Hello, world!\n';lets2='this is a string';leta='Success';lets3=`The result is${a}`;console.log('字符串类型',s1);console.log('字符串类型',s2);console.log('字符串类型',a);console.log('字符串类型',s3);})}}}

3、高级数据类型

3.1、枚举类型

enum(枚举)是一种预先定义的一组命名常量的值类型。使用枚举常量时,必须以枚举类型的名称作为前缀。

3.2、联合类型

联合类型允许一个变量拥有多种可能的类型,使用|分隔不同类型。

3.3、数组类型

数组是由若干个符合指定元素类型的值组成的集合。可通过数组字面量(用方括号[]包裹)进行初始化。数组索引从 0 开始,长度由元素数量决定。


4、运算符

4.1、赋值运算符

基础赋值运算符为=,用于将右侧的值赋给左侧变量。

复合赋值运算符将运算与赋值结合,例如:a += b等价于a = a + b

支持的复合赋值运算符包括:
+=-=*=/=%=<<=>>=>>>=&=|=^=

4.2、比较运算符


4.3、位运算符


4.4、逻辑运算符


4.5、算术运算符


5、语句

5.1、条件语句

5.2、循环语句(for)

5.3、while 语句

5.4、throw 和 try 语句

5.5、switch 语句


代码部分

@Entry@Componentstruct Index{build(){Column(){// 数据类型/* Button('数字类型').onClick(()=>{ let n1 = 3.14; let n2 = 3.141592; let n3 = 0.5; let n4 = 1e2; console.log('数字类型',n1); console.log('数字类型',n2); console.log('数字类型',n3); console.log('数字类型',n4); }) Button('布尔类型').onClick(()=>{ let isFDone: boolean = false; let isTDone: boolean = true; console.log('布尔类型',isFDone); console.log('布尔类型',isTDone); }) Button('字符串类型').onClick(()=>{ let s1 = 'Hello, world!\n'; let s2 = 'this is a string'; let a = 'Success'; let s3 = `The result is ${a}`; console.log('字符串类型',s1) console.log('字符串类型',s2) console.log('字符串类型',a) console.log('字符串类型',s3) }) Button('枚举类型').onClick(()=>{ let grade = Grade.优 if (grade == 'A') { console.log('枚举类型:优'); }else { console.log('枚举类型:错误'); } }) Button('联合类型').onClick(()=>{ let GradeAll : string | number | null = 1; console.log('联合类型',GradeAll) GradeAll = null; console.log('联合类型',GradeAll) GradeAll = "A"; console.log('联合类型',GradeAll) }) Button('数组类型').onClick(()=>{ // 数组定义 let arr:string[] = ['1','2','3','4'] let arr2: number[] = new Array(10) // 下标 console.log('数组类型',arr[3]); // 支持动态扩容 arr2[100]=100 console.log('数组类型',arr2.length); }) */// 运算符/* // 赋值运算符 Button('赋值运算符').onClick(()=>{ let a:number = 10 let b:number = 20 let c:number = 30 console.log('赋值运算符',a,b,c); }) // 算数运算符 Button('算数运算符').onClick(()=>{ let a = 10 let b = 20 console.log('算数运算符:加法',a+b); console.log('算数运算符:减法',a-b); console.log('算数运算符:乘法',a*b); console.log('算数运算符:除法',a/b); console.log('算数运算符:取余',a%b); console.log('算数运算符:自增',a++); console.log('算数运算符:自减',a--); }) // 比较运算符 Button('比较运算符').onClick(()=>{ let a = 10 let b = 20 console.log('大于',a>b); console.log('小于',a<b); console.log('等于',a==b); console.log('不等于',a!=b); console.log('大于等于',a>=b); console.log('小于等于',a<=b); }) // 逻辑运算符 Button('逻辑运算符').onClick(()=>{ let a = 10 let b = 20 console.log('逻辑与',a>5 && b>10); console.log('逻辑或',a>5 || b>10); console.log('逻辑非',!(a>5)); }) // 位运算符 Button('位运算符').onClick(()=>{ let a = 10 let b = 20 console.log('按位与',a&b); console.log('按位或',a|b); console.log('按位异或',a^b); console.log('按位取反',~a); console.log('左移',a<<1); console.log('右移',a>>1); }) */// 语句/* Button('条件语句').onClick(()=>{ let grade = Grade.优 if (grade == 'A') { console.log('枚举类型:优'); }else { console.log('枚举类型:错误'); } }) // 循环 Button('循环语句').onClick(()=>{ for (let i = 0; i < 10; i++) { console.log('循环语句',i); } }) // while循环 Button('while循环').onClick(()=>{ let i = 0 while (i < 10) { console.log('while循环',i); i++ } }) //throw和try语句 Button('throw和try语句').onClick(()=>{ try { throw new Error('throw和try语句'); }catch (e){ console.log(e.message); } }) //switch语句 Button('switch语句').onClick(()=>{ let grade = 'A' switch (grade) { case 'A': console.log('switch语句:优'); break; case 'B': console.log('switch语句:良'); break; case 'C': console.log('switch语句:中'); break; case 'D': console.log('switch语句:差'); break; } }) */}}}enumGrade{'优'='A','良'='B','中'='C','差'='D',}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 6:52:05

Vue.js 事件处理器

Vue.js 事件处理器 引言 在Web开发中,事件处理器是前端开发中非常重要的一部分。Vue.js作为一款流行的前端框架,提供了丰富的内置事件处理机制,使得开发者可以更加方便地处理用户交互。本文将详细介绍Vue.js的事件处理器,包括事件绑定、事件修饰符、自定义事件等内容。 …

作者头像 李华
网站建设 2026/5/17 6:17:48

【YOLOv12多模态创新改进】独家创新改进首发| SCI一区Top 2025 | 引入CIMFusion 跨模态交互特征融合模块,增强可见光和红外图像之间的特征交互,含多种创新改进,顶会顶刊发文热点

一、本文介绍 🔥本文给大家介绍使用 CIMFusion 跨模态交互特征融合模块 改进 YOLOv12 的多模态目标检测模型,通过跨模态注意力机制有效融合可见光和红外图像的特征,提升了模型对多模态信息的利用效率。在恶劣天气或复杂环境下,CIM 模块增强了模型的鲁棒性和泛化能力,帮助…

作者头像 李华
网站建设 2026/5/21 13:30:56

Java毕设选题推荐:基于SpringBoot智慧学生校舍系统设计与实现基于springboot的学生宿舍管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/13 2:09:01

基于stm32的河流检测系统

文章目录 摘要一、系统功能二、总体设计程序 三、效果图源码获取 摘要 随着科技的进步&#xff0c;经济的发展&#xff0c;水污染问题日益严重&#xff0c;尤其以河流资源的污染情况更加严重。通过对现有河流河流水质检测仪进行研究&#xff0c;制定总体设计方案&#xff0c;主…

作者头像 李华
网站建设 2026/5/13 3:15:18

计算机小程序毕设实战-基于springboot+小程序的睡眠健康管理系统小程序基于Java的微信小程序睡眠健康管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/13 3:15:20

例说FPGA:可直接用于工程项目的第一手经验【3.6】

17.5 软件程序解析 1.main.c源文件软件程序解析 main.c的函数列表如表17-3所示。 表17-3 main.c文件的函数列表 2.int main(void)函数 该函数为主函数,其流程图如图17-16所示。在各种外设初始化后,首先让LCD显示预先存储在Flash中的背景图片;接着对波形显示窗口进行初始…

作者头像 李华