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包太大,占用过多资源,请谨慎使用。

相关推荐
程序员大阳1 小时前
HTML+CSS+JS对话式实战(5)-活动管理页之查看报名名单的实现
javascript·css·html·查看报名名单
贾伟康2 小时前
HarmonyOS API 26 DevEco Code 需求到 ArkTS 骨架的提示词分层
harmonyos·arkts·ai coding·deveco code·工程提效
威哥爱编程3 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
威哥爱编程3 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
新*4 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
OpsEye5 小时前
别再挨个充会员了:多模型编码,最麻烦的从来不是选模型
javascript·ai编程
学以智用6 小时前
jsencrypt.js 完整详解
javascript
贾伟康7 小时前
HarmonyOS API 26 HMAF Skill 可解释任务计划与失败回退
harmonyos·arkts·智能体·skill·hmaf
贾伟康7 小时前
HarmonyOS API 26 HMAF 2.0 意图解析的可解释动作图
harmonyos·arkts·智能体·a2a·hmaf
Hilaku9 小时前
你们公司有 35 岁以上的前端吗?
前端·javascript·程序员