news 2026/7/3 5:19:36

ArkTS 基础语法学习笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ArkTS 基础语法学习笔记

ArkTS 基础语法学习笔记

本文是我学习鸿蒙 ArkTS 基础篇的总结笔记,涵盖基础入门、变量和类型、数组、对象、函数、箭头函数六个部分,方便自己回顾,也希望对同样在学 ArkTS 的朋友有帮助。

一、ArkTS 基础入门

ArkTS 是华为鸿蒙(HarmonyOS)为 ArkUI 声明式开发范式量身打造的编程语言,它在 TypeScript(TS)的基础上做了扩展和约束,同时保留了 TS 的大部分语法特性。可以简单理解为:

JavaScript → TypeScript → ArkTS

也就是说,只要有 JS/TS 基础,上手 ArkTS 会非常快。ArkTS 相比 TS 主要做了以下几点强化:

  • 强制静态类型检查:不允许anyunknown这类模糊类型随意使用,变量类型在编译期就要明确,减少运行时错误。
  • 不支持部分动态特性:比如不支持Object.definePropertywith语句等动态修改对象结构的写法,保证代码可预测、可优化。
  • 面向对象 + 声明式 UI:ArkTS 既支持传统的类、接口写法,也提供了@Component@State等装饰器(Decorator)用于声明式构建 UI。

一个最简单的 ArkTS 文件后缀是.ets(Extended TypeScript),基础的 Hello World 大致长这样:

function sayHello(name: string): string { return `Hello, ${name}!`; } console.info(sayHello('ArkTS'));

学习入门阶段,重点是搭好 DevEco Studio 开发环境,跑通一个空的 Ability 工程,理解好.ets文件的基本结构,为后面学变量、函数打基础。

二、变量和类型

2.1 变量声明

ArkTS 沿用 TS 的三种声明方式,但更推荐使用letconst,不建议使用var

let age: number = 18; // 可变 const name: string = 'Tom'; // 不可变,声明后不能重新赋值
  • let:块级作用域,值可以修改,日常变量首选。
  • const:块级作用域,值不可重新赋值,适合常量、不会变的配置项。
  • var:ArkTS 中不推荐甚至部分场景会报错,因为它是函数作用域,容易引发变量提升等问题。

2.2 基本数据类型

ArkTS 是强类型语言,声明变量时最好显式标注类型:

let isDone: boolean = false; let count: number = 100; let message: string = 'ArkTS'; let notDefined: undefined = undefined; let empty: null = null;

常见基础类型一览:

类型说明示例
number数字,不区分整数浮点数let n: number = 3.14
string字符串,支持模板字符串let s: string = `hi ${n}`
boolean布尔值let b: boolean = true
void一般用于函数无返回值function log(): void {}
null/undefined空值-

2.3 类型推断与类型注解

ArkTS 支持类型推断,但强烈建议关键变量都写上类型注解,这也是它和普通 JS 最大的区别之一:

let score = 90; // 推断为 number let score2: number = 90; // 显式注解,更推荐

需要特别注意:ArkTS不允许变量类型在运行时发生改变(不像 JS 那样随便变来变去),也不建议使用any,这是刚开始学的时候最容易踩的坑。

三、数组

数组是 ArkTS 中最常用的数据结构之一,声明方式主要有两种:

// 方式一:类型 + 方括号(推荐) let list1: number[] = [1, 2, 3]; // 方式二:泛型写法 let list2: Array<string> = ['a', 'b', 'c'];

3.1 常用操作

let fruits: string[] = ['apple', 'banana']; fruits.push('orange'); // 添加元素 fruits.pop(); // 删除最后一个 console.info(fruits[0]); // 访问元素 console.info(fruits.length); // 获取长度 // 遍历 for (let fruit of fruits) { console.info(fruit); } // forEach / map / filter 同样支持 let upper = fruits.map((item: string): string => item.toUpperCase());

3.2 注意点

  • 数组一旦声明了元素类型,就不能混入其他类型的元素,比如number[]里不能塞字符串,这一点和普通 JS 数组差别很大。
  • 多维数组写法:let matrix: number[][] = [[1, 2], [3, 4]];

四、对象

ArkTS 中定义对象结构,推荐使用interface(接口)或class(类),而不是像 JS 那样随意用字面量拼一个对象(ArkTS 对对象的动态扩展做了限制)。

4.1 使用 interface 定义对象结构

interface Person { name: string; age: number; email?: string; // 可选属性 } let p: Person = { name: 'Tom', age: 20 }; console.info(p.name);

4.2 使用 class 定义对象

class Animal { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } speak(): string { return `${this.name} says hello`; } } let dog = new Animal('旺财', 2); console.info(dog.speak());

4.3 注意点

  • ArkTS 中的对象结构在编译期就要确定,不支持给对象随意新增未声明的属性,这和 JS 中"对象是个筐,啥都能装"的用法不同,一开始很容易报错。
  • 推荐尽量用interface描述数据结构(比如接口返回的数据),用class封装带方法和状态的业务对象。

五、函数

5.1 普通函数声明

function add(a: number, b: number): number { return a + b; }
  • 参数和返回值都建议显式标注类型。
  • 如果函数没有返回值,返回类型写void

5.2 可选参数与默认参数

function greet(name: string, greeting?: string): string { return `${greeting ?? 'Hello'}, ${name}`; } function greet2(name: string, greeting: string = 'Hi'): string { return `${greeting}, ${name}`; }
  • ?表示可选参数,必须放在必填参数后面。
  • 也可以直接给参数写默认值,效果类似。

5.3 函数类型

函数本身也可以作为类型来声明变量:

let calc: (a: number, b: number) => number; calc = (a, b) => a + b;

六、箭头函数

箭头函数是 ES6 引入、在 ArkTS 中也大量使用的简洁写法,尤其是在 UI 事件回调、数组方法(map/filter)里非常常见。

6.1 基本写法

// 普通函数 function add(a: number, b: number): number { return a + b; } // 箭头函数写法 let add2 = (a: number, b: number): number => { return a + b; }; // 只有一行返回值时可以省略花括号和 return let add3 = (a: number, b: number): number => a + b;

6.2 箭头函数 vs 普通函数

对比点普通函数箭头函数
this指向调用时动态绑定继承外层作用域的this,不会改变
写法相对繁琐更简洁,适合回调场景
是否有arguments没有

在 ArkUI 组件里写按钮点击等事件回调时,箭头函数用得非常多,因为它不会改变this指向,可以直接访问组件内部的状态:

Button('点击我') .onClick(() => { this.count++; // 箭头函数中 this 仍指向组件实例 })

七、小结

这一阶段学下来,ArkTS 给我最大的感受是:"更严格的 TypeScript"。它牺牲了一部分 JS/TS 的灵活性(比如禁用any、限制对象动态扩展),换来的是编译期就能发现的类型安全和更好的运行时性能,这也很符合它作为移动端/元服务开发语言的定位。

后续学习路线上,打算继续深入 ArkUI 的声明式开发(@Component@State@Prop等装饰器),把这些基础语法真正用到界面开发中去,到时候再写一篇进阶笔记。


本文为个人学习笔记整理,如有理解偏差欢迎指正交流。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 5:19:00

2026智能门锁五大维度硬核实测:安全/识别/猫眼/AI/售后数据对比

2026年千元档&#xff08;800-1500元&#xff09;已占线上销量47%&#xff0c;3D人脸、双摄主动防御、五年质保正从高端下放。但配置堆得满不代表体验拉得满——我们选取格行智能门锁、凯迪仕K70、小米智能门锁2 Pro&#xff0c;从安全、识别、猫眼、AI、售后五个维度深度实测。…

作者头像 李华
网站建设 2026/7/3 5:17:19

Java毕设选题推荐:基于 SpringBoot 的垃圾分类宣传与智能监管系统的设计与实现 基于 SpringBoot 的社区垃圾投放记录统计分【附源码、mysql、文档、调试+代码讲解+全bao等】

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

作者头像 李华
网站建设 2026/7/3 5:16:48

AutoGluon实战指南:7行代码冲击Kaggle Top 4%的自动化机器学习全流程

1. 这不是魔法&#xff0c;是AutoGluon把机器学习的“脏活累活”全干了你有没有在Kaggle上盯着Leaderboard发过呆&#xff1f;看着别人的名字排在前5%&#xff0c;自己调了三天XGBoost参数却卡在第37%的位置&#xff0c;连数据清洗都像在解一道没有提示的谜题。我试过——去年参…

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

【全英文期刊收集】

市面最新全英文期刊收集报告 收集日期&#xff1a;2026-07-02 覆盖类别&#xff1a;时事新闻 / 商业财经 / 科技 / 文学文化 / 学术研究 数据来源&#xff1a;各期刊官网及权威媒体榜单 一、时事新闻类&#xff08;Current Affairs & News&#xff09; 期刊名称创刊年出版…

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

HCIP练习错题

在ICMPv6中&#xff0c;路由器使用ICMPv6EchoReply报文回应收到的Request报文&#xff0c;那么以下描述正确的是哪些项?A. ICMPv6 Echo Reply的Type字段是129 B. ICMPv6Echo Request的Type字段是129 C. ICMPv6 Echo Request的Type字段是128 D. ICMPv6 Echo Reply的Type字段…

作者头像 李华