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

前言

类型检查在动态类型语言中非常重要,了解变量的实际类型有助于避免运行时错误。@pura/harmony-utilsTypeUtil 封装了类型检查方法,支持多种类型的精确判断。本文将从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 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
北墨NoLimit9 小时前
鸿蒙线程间通信怎么选:TaskPool、TaskGroup、LongTask 与 Worker 实战
typescript·harmonyos
woshihuanglaoshi11 小时前
错题四科入库:鸿蒙错题本种子数据与复习队列效果
学习·华为·harmonyos·鸿蒙
kiros_wang12 小时前
鸿蒙ArkTS枚举实战|静态枚举、动态枚举业务选型、规范落地与避坑全解
harmonyos
2501_9197490314 小时前
华为鸿蒙免费音乐APP—小羊免费音乐
华为·harmonyos·鸿蒙
世人万千丶14 小时前
物品借还闭环:鸿蒙物品清单种子数据与清单效果
学习·华为·harmonyos·鸿蒙
贾伟康15 小时前
【知律|10】HarmonyOS ArkTS 案例边界实战:明确普法内容不替代法律意见
harmonyos·arkts·arkui·应用合规·内容治理
xq952715 小时前
鸿蒙组件化设计横空出世
harmonyos
特立独行的猫A15 小时前
Tauri v2 桌面应用m3u8dl-tauri移植到 HarmonyOS(鸿蒙 PC)完整实战指南
harmonyos
HarmonyOS_SDK16 小时前
从“一屏一态”到“一屏多能”:WPS通过HarmonyOS多窗口能力重塑移动办公体验
harmonyos