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

相关推荐
网络安全-老纪30 分钟前
【网络安全】PostMessage:分析JS实现XSS
javascript·web安全·xss
轻口味1 小时前
【每日学点鸿蒙知识】跳转三方地图、getStringSync性能、键盘避让模式等
华为·harmonyos
儿歌八万首1 小时前
鸿蒙ArkUI实现部门树列表
华为·harmonyos·鸿蒙·arkui
诗歌难吟4642 小时前
初始值变量类型
java·前端·javascript
等一场春雨2 小时前
javascript e.preventDefault() 的作用和用法
开发语言·javascript·react.js
长风清留扬2 小时前
小程序与物联网(IoT)融合:开启智能生活新篇章
javascript·css·物联网·微信小程序·小程序·生活
万少3 小时前
鸿蒙元服务实战-笑笑五子棋(5)
前端·harmonyos·canvas
匹马夕阳3 小时前
vue3中onUpdated钩子函数和nextTick的具体使用场景和区别
前端·javascript·vue.js
前端773 小时前
vue管理后台搭建
前端·javascript·vue.js
塞尔维亚大汉3 小时前
移植案例与原理 - startup子系统之syspara_lite系统属性部件
操作系统·harmonyos