news 2026/4/22 21:12:17

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/4/23 0:57:20

燃爆!大数据OLAP在电力行业的创新应用

燃爆&#xff01;大数据OLAP在电力行业的创新应用 摘要/引言 "2023年夏季&#xff0c;某省电网在用电高峰期间成功避免了大规模停电事故&#xff0c;这背后是一个每天处理超过10亿条电力数据的OLAP系统在默默支撑。"这个真实案例揭示了一个不争的事实&#xff1a;电…

作者头像 李华
网站建设 2026/4/17 20:08:33

Java毕设项目推荐-基于springboot的学生宿舍管理系统的设计与实现宿舍资源管理、学生入住、费用管理、设备报修、访客登记【附源码+文档,调试定制服务】

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

作者头像 李华
网站建设 2026/4/22 18:42:25

llm使用 AgentScope-Tuner 通过 RL 训练 FrozenLake 智能体

agentscope-samples/tuner/frozen_lake at main agentscope-ai/agentscope-samples --- agentscope-samples/tuner/frozen_lake at main agentscope-ai/agentscope-samples At least 2 NVIDIA GPUs with CUDA 12.8 or newer 至少需要 2 块 NVIDIA GPU&#xff0c;支持 CUDA 1…

作者头像 李华
网站建设 2026/4/23 13:23:34

【毕业设计】基于springboot的周至猕猴桃产品售卖网站的设计与实现(源码+文档+远程调试,全bao定制等)

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

作者头像 李华
网站建设 2026/4/18 9:46:21

11.Python文件操作

在Python编程中&#xff0c;文件操作是最基础且重要的功能之一。无论是处理配置文件、读取数据文件&#xff0c;还是写入日志&#xff0c;都离不开文件操作。本文将通过实际代码示例&#xff0c;全面讲解Python文件操作的核心知识点。 一、文件操作 1. 文件打开与关闭 1.1 打…

作者头像 李华