鸿蒙三方库 | 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 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
行者-全栈开发6 小时前
【鸿蒙心迹】深色模式适配全链路——从配置到自定义(HarmonyOS 7.x)
华为·harmonyos
行者-全栈开发16 小时前
【鸿蒙心迹】国际化 i18n 与多语言资源管理实战(HarmonyOS 7.x)
ui·华为·重构·国际化·harmonyos·多语言
OH_TPC18 小时前
HarmonyOS APP开发---"云客服"远程视频客服App,需要用到这个库
harmonyos
逆回1 天前
给鸿蒙手机做一只 3D 宠物:五个把我卡住的问题
harmonyos
钉先生贾1 天前
性能、体积与稳定性:怎样写出可信的适配结论
华为·harmonyos
笑 总不会犯错2 天前
摆脱多端数据撕裂,鸿蒙分布式数据库同步与冲突合并
harmonyos
用户117910488332 天前
鸿蒙签名失败不是玄学:5 个证据点把 hapsigntool 一次排通 GitHub:swsgbl/hmharness
开源·ai编程·harmonyos
redtank20002 天前
纯血鸿蒙小工具三件套实测:弹幕手持、爱记录与仓库管理软件
学习·华为·智能手机·harmonyos
xyzzklk2 天前
变相解决华为Mate 8锁屏后无法建立入站网络连接
linux·运维·服务器·网络·华为·go·安卓
用户86194177207412 天前
uni-app 的蓝牙 API 在鸿蒙上不生效?我写了个兼容层,让老代码零改动跑起来
harmonyos