Harmony OS开发-ArkTS语言速成五

程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java相关开发、鸿蒙开发、人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴!君志所向,一往无前!


1.ArkTS中的联合类型

1.1 联合类型

在TypeScript中,联合类型(Union Types)允许我们定义一个变量可以是多种类型之一。

ArkTS作为TypeScript的一个框架,同样支持联合类型的特性。联合类型对于处理那些可能在不同情况下具有不同类型的变量非常有用。

联合类型使用 | 操作符来定义,它可以包含任意数量的类型。

类型缩小是 TypeScript 在运行时通过某些操作确保变量类型的过程。常见的类型缩小方式包括使用 typeof、instanceof、赋值、控制流语句(如 if、switch)等

1.2 联合类型使用

1.定义联合类型

使用 | 联合对应的数据类型

复制代码
 //定义联合类型
 let str:string | number =0;

2.使用联合类型

复制代码
  //赋值
  str="测试联合类型"
  str=100;
  console.log("Feri-联合类型 ,",str)

2.ArkTS中的枚举类型

2.1 枚举类型

枚举类型是一种特殊的数据类型,约定变量只能在一组数据范围内选择值。

枚举(Enums)是一种特殊的数据类型,它允许开发者为一组相关的数值定义友好的名称。枚举在许多编程语言中都是一种常见的特性,它们可以增强代码的可读性和维护性。

2.2 枚举类型使用

1.定义枚举

复制代码
enum LoginType{
  pass="账号密码登录",
  code="验证码登录",
  qrcode="扫码登录",
  three="第三方登录",
  face="人脸识别登录"
}

2.使用枚举

复制代码
 Button("枚举类型").onClick(()=>{
          //枚举类型使用
          let type1:LoginType =LoginType.code
          let type2:LoginType=LoginType.qrcode
          console.log("Feri-枚举,",type1)
          console.log("Feri-枚举",type2)

      }).margin(5).width("100%")

3.导出

使用关键字export导出顶层的声明 未导出的声明名称被视为私有名称,只能在声明该名称的模块中使用

复制代码
//export 其他模块都可以导入 
export class User{
  id:number =0;
  username:string="";
  password:string="";

  constructor(id: number,name: string,pass: string) {
    this.id=id;
    this.username=name;
    this.password=pass;
  }
}

4.导入

4.1 静态导入

导入声明用于导入从其他模块导出的实体,并在当前模块中提供其绑定。

导入声明由两部分组成:

1.导入路径

用于指定导入的模块;

2.导入绑定

用于定义导入的模块中的可用实体集和使用形式(限定或不限定使用)。

导入绑定可以有几种形式:

假设模块具有路径"./utils"和导出实体"X"和"Y"。

导入绑定* as A表示绑定名称"A",通过A.name可访问从导入路径指定的模块导出的所有实体:

复制代码
import * as Utils from './utils/FeriUtil';
Utils.X // 表示来自FeriUtil的X
Utils.Y // 表示来自FeriUtil的Y

导入绑定{ ident1, ..., identN }表示将导出的实体与指定名称绑定,该名称可以用作简单名称:

复制代码
import { X, Y } from './utils/FeriUtil';
X // 表示来自FeriUtil的X
Y // 表示来自FeriUtil的Y

如果标识符列表定义了ident as alias,则实体ident将绑定在名称alias下:

复制代码
import { X as Z, Y } from './utils/FeriUtil';
Z // 表示来自FeriUtils的X
Y // 表示来自FeriUtil的Y
X // 编译时错误:'X'不可见

4.2 动态导入

应用开发的有些场景中,如果希望根据条件导入模块或者按需导入模块,可以使用动态导入代替静态导入。

import()语法通常称为动态导入dynamic import,是一种类似函数的表达式,用来动态导入模块。以这种方式调用,将返回一个promise。

如下例所示,import(modulePath)可以加载模块并返回一个promise,该promise resolve为一个包含其所有导出的模块对象。

该表达式可以在代码中的任意位置调用。

复制代码
// Calc.ts
export function add(a:number, b:number):number {
  let c = a + b;
  console.info('Dynamic import, %d + %d = %d', a, b, c);
  return c;
}

// Index.ts
import("./Calc").then((obj: ESObject) => {
  console.info(obj.add(3, 5));  
}).catch((err: Error) => {
  console.error("Module dynamic import error: ", err);
});

4.3 导入HarmonyOS SDK的开放能力

HarmonyOS SDK提供的开放能力(接口)也需要在导入声明后使用。可直接导入接口模块来使用该模块内的所有接口能力,例如:

复制代码
import UIAbility from '@ohos.app.ability.UIAbility';

从HarmonyOS NEXT Developer Preview 1版本开始引入Kit概念。SDK对同一个Kit下的接口模块进行了封装,开发者在示例代码中可通过导入Kit的方式来使用Kit所包含的接口能力。

其中,Kit封装的接口模块可查看SDK目录下Kit子目录中各Kit的定义。

通过导入Kit方式使用开放能力有三种方式:

方式一:导入Kit下单个模块的接口能力

复制代码
import { UIAbility } from '@kit.AbilityKit';

方式二:导入Kit下多个模块的接口能力

复制代码
import { UIAbility, Ability, Context } from '@kit.AbilityKit';

方式三:导入Kit包含的所有模块的接口能力

复制代码
import * as module from '@kit.AbilityKit';

其中,"module"为别名,可自定义,然后通过该名称调用模块的接口。

说明

方式三可能会导入过多无需使用的模块,导致编译后的HAP包太大,占用过多资源,请谨慎使用。

相关推荐
qczg_wxg1 天前
React Native的动画系统
javascript·react native·react.js
漂流瓶jz1 天前
解锁Babel核心功能:从转义语法到插件开发
前端·javascript·typescript
大怪v1 天前
老乡,别走!Javascript隐藏功能你知道吗?
前端·javascript·代码规范
ERP老兵-冷溪虎山1 天前
Python/JS/Go/Java同步学习(第三篇)四语言“切片“对照表: 财务“小南“纸切片术切凭证到崩溃(附源码/截图/参数表/避坑指南/老板沉默术)
java·javascript·python·golang·中医编程·四语言同步学习·职场生存指南
gnip1 天前
结合Worker通知应用更新
前端·javascript
_Rookie._1 天前
vue3 使用css变量
前端·javascript·html
爱笑的眼睛111 天前
深入剖析 HarmonyOS ArkUI 声明式开发:状态管理艺术与最佳实践
华为·harmonyos
良木林1 天前
JS函数进阶
开发语言·前端·javascript
安卓开发者1 天前
鸿蒙NEXT交互机制解析:从输入设备到手势响应的全面指南
microsoft·交互·harmonyos
HelloRevit1 天前
让B站视频4倍速度播放
前端·javascript·音视频