鸿蒙三方库 | harmony-utils之TypeUtil类型检查工具详解

前言

类型检查在动态类型语言中非常重要,了解变量的实际类型有助于避免运行时错误。@pura/harmony-utils 的 TypeUtil 封装了类型检查方法,支持多种类型的精确判断。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

一、TypeUtil核心API

TypeUtil 提供了以下类型检查方法:

方法 说明 返回类型 使用场景
isString(value) 是否字符串 boolean 类型判断
isNumber(value) 是否数字 boolean 类型判断
isBoolean(value) 是否布尔值 boolean 类型判断
isArray(value) 是否数组 boolean 类型判断
isObject(value) 是否对象 boolean 类型判断
isFunction(value) 是否函数 boolean 类型判断
isNull(value) 是否null boolean 空值判断
isUndefined(value) 是否undefined boolean 空值判断
getType(value) 获取类型名称 string 类型识别

1.1 核心特性

  • 简洁易用:封装复杂逻辑为一行调用,降低使用门槛
  • 类型安全:完整的TypeScript类型定义,编译期即可发现错误
  • 异常处理:内置异常捕获机制,避免运行时崩溃
  • 全面覆盖:覆盖所有JavaScript基本类型和引用类型

1.2 typeof与TypeUtil对比

值 typeof TypeUtil.getType
null 'object' 'null'
\[\] 'object' 'array'
NaN 'number' 'NaN'
/regex/ 'object' 'regexp'

二、完整使用步骤

2.1 安装依赖

bash 复制代码
ohpm install @pura/harmony-utils

2.2 基本类型检查

typescript 复制代码
import { TypeUtil } from '@pura/harmony-utils';

Button('基本类型检查')
  .width('100%')
  .onClick(() => {
    try {
      let isStr = TypeUtil.isString('hello');
      let isNum = TypeUtil.isNumber(123);
      let isBool = TypeUtil.isBoolean(true);
      this.result = `isString('hello'): ${isStr}\nisNumber(123): ${isNum}\nisBoolean(true): ${isBool}`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

2.3 引用类型检查

typescript 复制代码
Button('引用类型检查')
  .width('100%')
  .onClick(() => {
    try {
      let isArr = TypeUtil.isArray([1, 2, 3]);
      let isObj = TypeUtil.isObject({ name: 'test' });
      let isFn = TypeUtil.isFunction(() => {});
      this.result = `isArray: ${isArr}\nisObject: ${isObj}\nisFunction: ${isFn}`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

三、完整页面示例

typescript 复制代码
import { TypeUtil } from '@pura/harmony-utils';

@Entry
@Component
struct TypeDemo {
  @State result: string = '';

  build() {
    Column({ space: 12 }) {
      Button('类型检查').width('100%').onClick(() => {
        this.result = `string: ${TypeUtil.isString('hi')}\nnumber: ${TypeUtil.isNumber(42)}\narray: ${TypeUtil.isArray([])}`;
      });
      Button('获取类型').width('100%').onClick(() => {
        this.result = `null: ${TypeUtil.getType(null)}\n[]: ${TypeUtil.getType([])}\nNaN: ${TypeUtil.getType(NaN)}`;
      });
      Text(this.result).fontSize(14).fontColor('#333333')
    }
    .padding(16)
  }
}

四、进阶用法

4.1 安全数据处理

typescript 复制代码
import { TypeUtil } from '@pura/harmony-utils';

function safeProcess(data: unknown): string {
  if (TypeUtil.isString(data)) {
    return data.toUpperCase();
  }
  if (TypeUtil.isNumber(data)) {
    return data.toFixed(2);
  }
  if (TypeUtil.isArray(data)) {
    return data.join(', ');
  }
  return String(data);
}

4.2 API响应类型检查

typescript 复制代码
function validateApiResponse(response: unknown): boolean {
  if (!TypeUtil.isObject(response)) return false;
  return TypeUtil.isNumber((response as Record<string, Object>)['code']);
}

五、注意事项

  1. null陷阱:typeof null === 'object',TypeUtil正确识别为null
  2. NaN判断:typeof NaN === 'number',TypeUtil可区分
  3. 数组判断:typeof \[\] === 'object',TypeUtil正确识别为array
  4. 初始化依赖 :使用前需确保 AppUtil.init() 已调用
  5. 包装类型:new Number(1)是对象不是数字

六、常见问题

Q1: isNumber(NaN)返回什么?

返回true,因为NaN在JavaScript中是number类型。使用NumberUtil.isNaN更精确。

Q2: isObject(null)返回什么?

返回false,TypeUtil将null单独处理。

Q3: getType对Date返回什么?

返回'date',TypeUtil能识别内置对象类型。

Q4: isFunction对async函数有效吗?

有效,async函数也是函数类型。

总结

TypeUtil 的类型检查方法为动态类型判断提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用这些方法实现安全的类型判断和数据处理。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
李游Leo4 小时前
HarmonyOS 7 API 26 升级适配实战:API Change Assistant、targetSDKVersion 与兼容性回归
harmonyos
OH_TPC4 小时前
HarmonyOS APP开发---"智泊"智能停车App,需要用到这个库
harmonyos
用户117910488335 小时前
AI粘贴多行需求为什么会误执行?hmharness安全粘贴拆解 GitHub:swsgbl/hmharness
ai编程·harmonyos
用户0934077735145 小时前
HarmonyOS WPS Open SDK 实践:从 HAR 集成到 OpenFileRequest 最小闭环
typescript·harmonyos
威哥爱编程12 小时前
HarmonyOS 7 Fast Kit 算法加速实战:四大核心能力,把算力从系统里"借"出来
harmonyos·arkts
威哥爱编程12 小时前
HarmonyOS 7 游戏快启实战:Graphics Accelerate Kit 内存镜像秒级启动 + 预启动,把读条变成"秒进"
harmonyos·arkts
木子雨廷12 小时前
第 19 天|Preferences:轻量缓存与状态恢复
harmonyos
威哥爱编程12 小时前
HarmonyOS 7 精准碰一碰实战:识别触碰坐标,素材精准插入指定位置
harmonyos
二流小码农12 小时前
鸿蒙开发:ArrayList,可不会让UI更新哦
android·ios·harmonyos
威哥爱编程12 小时前
HarmonyOS 7 数字盾 2.0 实战:可信数字签名、可信 UI 确认与可信输入
harmonyos