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

相关推荐
马剑威(威哥爱编程)15 小时前
【共创稿事节】HarmonyOS 7 Agent 开发实战 11:并发多会话隔离
华为·harmonyos
行者-全栈开发18 小时前
【共创稿事节】HarmonyOS 7 空间音频实战:用 AudioSpatializationManager 构建“听得见方位“的声场
harmonyos·arkts·鸿蒙·空间音频·api 26·audio kit
马剑威(威哥爱编程)19 小时前
【共创稿事节】HarmonyOS 7 Agent 开发实战 03:Tool Calling 让 AI 查实时订单与库存
华为·harmonyos
倔强的石头10621 小时前
把 Typst 搬上开源鸿蒙 PC:一次“干净”的移植记录
华为·开源·harmonyos
梦想不只是梦与想1 天前
鸿蒙 预览数据模拟:Hamock
harmonyos·模拟数据·hamock
贾伟康1 天前
【化学实验室|04】HarmonyOS ArkTS 场景选择器实战:让 13 个离线实验的入口、筛选和返回路径保持一致
harmonyos·arkts·canvas·arkui·化学实验
特立独行的猫a1 天前
仓颉语言GUI开发实战:用仓颉写串口/网络二合一调试助手
网络·ui·gui·harmonyos·tauri·仓颉
hqzing1 天前
把 glibc 移植到鸿蒙 PC 上:它能用来做什么
华为·harmonyos
OH_TPC2 天前
HarmonyOS APP开发---“习惯猫“习惯打卡App,需要用到这个库
华为·harmonyos·鸿蒙
熊猫钓鱼>_>2 天前
开源鸿蒙平台 KMP 三方库 kotlin-csv 适配全流程:从编码假设到沙箱真机互通验证
开发语言·人工智能·华为·kotlin·harmonyos·鸿蒙