ArkTS 是 HarmonyOS 优选的主力应用开发语言。它在 TypeScript(简称 TS)的基础上,匹配 ArkUI 框架,扩展了声明式 UI、状态管理等相应的能力,让开发者以更简洁、更自然的方式开发跨端应用。要了解什么是 ArkTS,我们首先要了解下 ArkTS、TypeScript 和 JavaScript 之间的关系:
由此可知,TypeScript 是 JavaScript 的超集,ArkTS 则是 TypeScript 的超集,他们的关系如下图所示:
在学习 ArkTS 声明式的相关语法之前,我们首先学习下 TypeScript 的基础语法。
TypeScript 支持一些基础的数据类型,如布尔型、数组、字符串等,下文举例几个较为常用的数据类型,我们来了解下他们的基本使用。
布尔值
TypeScript 中可以使用 boolean 来表示这个变量是布尔值,可以赋值为 true 或者 false。
数字
TypeScript 里的所有数字都是浮点数,这些浮点数的类型是 number。除了支持十进制,还支持二进制、八进制、十六进制。
字符串
TypeScript 里使用 string 表示文本数据类型, 可以使用双引号( ")或单引号(')表示字符串。
数组
TypeScrip 有两种方式可以定义数组。第一种,可以在元素类型后面接上 [],表示由此类型元素组成的一个数组。
第二种方式是使用数组泛型,Array<元素类型>。
元组
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。比如,你可以定义一对值分别为 string 和 number 类型的元组。
枚举
enum 类型是对 JavaScript 标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字。
Unknown
有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。那么我们可以使用 unknown 类型来标记这些变量。
Void
当一个函数没有返回值时,你通常会见到其返回值类型是 void。
Null 和 Undefined
TypeScript 里,undefined 和 null 两者各自有自己的类型分别叫做 undefined 和 null。
联合类型
联合类型(Union Types)表示取值可以为多种类型中的一种。
条件语句用于基于不同的条件来执行不同的动作。TypeScript 条件语句是通过一条或多条语句的执行结果(True 或 False)来决定执行的代码块。
if 语句
TypeScript if 语句由一个布尔表达式后跟一个或多个语句组成。
if...else 语句
一个 if 语句后可跟一个可选的 else 语句,else 语句在布尔表达式为 false 时执行。
if...else if....else 语句
if...else if....else 语句在执行多个判断条件的时候很有用。
switch…case 语句
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。
函数是一组一起执行一个任务的语句,函数声明要告诉编译器函数的名称、返回类型和参数。TypeScript 可以创建有名字的函数和匿名函数,其创建方法如下:
为函数定义类型
为了确保输入输出的准确性,我们可以为上面那个函数添加类型:
可选参数
在 TypeScript 里我们可以在参数名旁使用 ?实现可选参数的功能。比如,我们想让 lastName 是可选的:
剩余参数
剩余参数会被当做个数不限的可选参数。可以一个都没有,同样也可以有任意个。可以使用省略号( ...)进行定义:
箭头函数
ES6 版本的 TypeScript 提供了一个箭头函数,它是定义匿名函数的简写语法,用于函数表达式,它省略了 function 关键字。箭头函数的定义如下,其函数是一个语句块:
其中,括号内是函数的入参,可以有 0 到多个参数,箭头后是函数的代码块。我们可以将这个箭头函数赋值给一个变量,如下所示:
如何要主动调用这个箭头函数,可以按如下方法去调用:
接下来我们看看如何将我们熟悉的函数定义方式转换为箭头函数。我们可以定义一个判断正负数的函数,如下:
其调用方法如下:
如果将这个函数定义为箭头函数,定义如下所示:
其调用方法如下:
后面,我们在学习 HarmonyOS 应用开发时会经常用到箭头函数。例如,给一个按钮添加点击事件,其中 onClick 事件中的函数就是箭头函数。
TypeScript 支持基于类的面向对象的编程方式,定义类的关键字为 class,后面紧跟类名。类描述了所创建的对象共同的属性和方法。
类的定义
例如,我们可以声明一个 Person 类,这个类有 3 个成员:一个是属性(包含 name 和 age),一个是构造函数,一个是 getPersonInfo 方法,其定义如下所示。
通过上面的 Person 类,我们可以定义一个人物 Jacky 并获取他的基本信息,其定义如下:
继承
继承就是子类继承父类的特征和行为,使得子类具有父类相同的行为。TypeScript 中允许使用继承来扩展现有的类,对应的关键字为 extends。
通过上面的 Employee 类,我们可以定义一个人物 Tom,这里可以获取他的基本信息,也可以获取他的雇主信息,其定义如下:
在 TypeScript 中,有 public、private、protected 修饰符,其功能和具体使用场景大家可以参考 TypeScript 的相关学习资料,进行拓展学习。
随着应用越来越大,通常要将代码拆分成多个文件,即所谓的模块(module)。模块可以相互加载,并可以使用特殊的指令 export 和 import 来交换功能,从另一个模块调用一个模块的函数。
两个模块之间的关系是通过在文件级别上使用 import 和 export 建立的。模块里面的变量、函数和类等在模块外部是不可见的,除非明确地使用 export 导出它们。类似地,我们必须通过 import 导入其他模块导出的变量、函数、类等。
导出
任何声明(比如变量,函数,类,类型别名或接口)都能够通过添加 export 关键字来导出,例如我们要把 NewsData 这个类导出,代码示意如下:
导入
模块的导入操作与导出一样简单。可以使用以下 import 形式之一来导入其它模块中的导出内容。
当一个对象实现了 Symbol.iterator 属性时,我们认为它是可迭代的。一些内置的类型如 Array,Map,Set,String,Int32Array,Uint32Array 等都具有可迭代性。
for..of 语句
for..of 会遍历可迭代的对象,调用对象上的 Symbol.iterator 方法。下面是在数组上使用 for..of 的简单例子:
for..of vs. for..in 语句
for..of 和 for..in 均可迭代一个列表,但是用于迭代的值却不同:for..in 迭代的是对象的键,而 for..of 则迭代的是对象的值。
TypeScript 是一个开源的编程语言,本章节只介绍了 TypeScript 的基础语法知识,更多内容大家可以参考教程:《做鸿蒙应用开发到底学习些啥?》
大家在学习过程中,如果没有搭建TypeScript的开发环境,也可以参考一下这份《做鸿蒙应用开发到底学习些啥?》进行编码练习。
已掌握TypeScript编程基础的学员可以跳过本章节的学习,没有接触过TypeScript的同学可以先补齐相关的语法基础,再进入HarmonyOS的相关开发学习之旅
除了上面整理的学习文档中的核心技术需要掌握以外,还有数据结构,算法,等基础技术点是你必须掌握的,不过都已经被我整理PDF模板,不需要你自己去摸索爬坑。不需要你到处找资料。学习笔记都是打包给到大家,获取方式:点赞、关注、转发。私信回复(鸿蒙)即可获取鸿蒙开发资料
《鸿蒙 (Harmony OS)开发学习手册》
入门必看:↓↓↓
1. 应用开发导读(ArkTS)
2. 应用开发导读(Java)
HarmonyOS 概念
1. 系统定义
2. 技术架构
3. 技术特性
4. 系统安全