目录
什么是ArkTS?
ArkTS的发展趋势
ArkTS的定位及约束
ArkTS的对UI的拓展
1、UI描述
2、状态管理:
ArkTS语法基础
基本知识:声明
基本知识:类型
基本知识:空安全
基本知识:类型安全与类型推断
基本知识:语句
函数的声明和使用
类的声明和使用
模块的导入与导出
ArkTS对UI的语法支持
自定义组件的规则
组件描述的规则
组件描述
属性方法
事件方法
布局描述
渲染控制语法
if/else if/else
Foreach编辑
LazyForeach
什么是ArkTS?
ArkTS是鸿蒙生态的应用开发语言,它提供了声明式UI范式、状态管理支持等相应的能力,让开发者可以以更简洁、更自然的方式开发应用。
同时,它在保持TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序运行之前的开发期能检测更多错误,提升代码正确性;并实现更好的运行性能。
ArkTS的发展趋势
ArkTS的定位及约束
- ArkTS作为OH/HMOS官方主流推荐开发语言
- ets以及.d.ets作为ArkTS语言源码后缀
- 与TS/JS高效互操作,兼容TS/JS生态
- ets文件可以import ets/ts/js文件源码,但是ts/js文件不允许import ets文件源码
- 新增SDK API(不包括NDK部分)接口需要符合ArkTS规范
左侧TypeScript代码片段演示了如何在运行时通过添加和删除某些属性来更改对象的布局。运行时支持此类特性需要大量的性能开销,ArkTS禁止使用any类型、禁止在运行时更改对象的布局。可以使用可选属性和给该属性赋值undefined的方式来替代对对象布局的动态改变。
此TypeScript代码段展示了过于灵活的特性导致行为的二义性。在class C中存在实例方法m,它应被C的所有实例所共享,也就是说C的实例调用m方法时行为应一致。在TypeScript中,可以使用对象字面的方式创建C的实例,跳过这样的约束,构造一个不符合C预期但类型是C的实例,这是不安全的行为,也会对使用者造成困惑。
ArkTS禁止使用对象字面量初始化具有方法的类,请使用new操作符创建类的实例或者将类中方法改为类的实例属性(类型为方法)。
ArkTS的对UI的拓展
1、UI描述
在TS的类型系统的基础上,做了进一步的扩展:定义了各种装饰器、自定义组件和UI描述机制,再配合UI开发框架中的UI内置组件、事件方法、属性方法等共同构成了应用开发的主体。
2、状态管理:
ArkTS在TS的类型系统的基础上,做了进一步的扩展:定义了各种装饰器、自定义组件和UI描述机制,再配合UI开发框架中的UI内置组件、事件方法、属性方法等共同构成了应用开发的主体。ArkTS的对UI的拓展UI 相关联的数据,不仅可以在组件内使用,还可以在不同组件层级间传递,比如父子组件之间,爷孙组件之间,也可以是全局范围内的传递,还可以是跨设备传递。
ArkTS语法基础
基本知识:声明
基本知识:类型
基本类型:string、number、boolean、Enum
引用类型:Array、基于Object的自定义类
联合类型:Union
类型别名:Aliases
// 基本类型:string、number、boolean、Enum
let name: string = '小明’;
let age: number = 20;
let isMale: boolean = true;console.log(name); // 输出小明
console.log(age.toString());// 输出:20
console.log(`我的名字叫${name},今年${age}岁`);enum Color {Red,Blue,Green
}let favouriteColor: Color = Color.Red;// 引用类型:Array、基类Object
let students: string[] = ['小明', '小张', '小王', '小李’];
let students: Array<string>= ['小明', '小张', '小王', '小李’];// 联合类型:Union
let luckyNum: number | string = 7;
luckyNum= ’seven';// 类型别名:Aliasestype Matrix= number[][];
type NullableObject= Object | null;
基本知识:空安全
一般来说,有时会存在声明变量类型而不明确提供初始值。在这类情况下,通常使用联合类型包含null值
1、使用该变量中需要进行判空
let name: string | null = null
console.log(name.length.toString()); //Error Message:Cannot read property length of null
2、使用空值合并表达式,??左边的值为null时会返回表达式右边的值
let name: string | null = null
const res = name ?? '';
3、使用?进行可选链,如果是null,运算符会返回undefined
let str:string | null = 'aa';
let len = str?.length;
基本知识:类型安全与类型推断
基本知识:语句
// 条件语句
let isValid: boolean;
if (Math.random() > 0.5) {isValid = true;
} else {isValid = false;
}// 条件表达式
let isValid = Math.random() > 0.5 ? true : false;// 循环语句 用于重复执行相同的一组语句,提高效率、简化代码循环语句
// for
for (let i = 0; i < students.length; i++) {console.log(students[i]);
}// for...of
for (let student of students) {console.log(student);
}// while
let index = 0;
while (index < students.length) {console.log(students[index]);index++;
}
函数的声明和使用
类的声明和使用
模块的导入与导出
通过import导入另一个文件的变量、函数、类等
// Page.ets
import { Person } from './Person';
const person = new Person('小张', 20, true);
person.introduce();//输出:小张是个男生,年龄是28岁
ArkTS对UI的语法支持
自定义组件的规则

组件描述的规则
组件描述
属性方法
事件方法
布局描述

渲染控制语法
if/else if/else

Foreach
LazyForeach
