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

相关推荐
亦良Cool2 小时前
H3C 模拟器 HCL打不开:LoadLibrary failed with error 87: 参数错误。
huawei
萌新源2 小时前
【鸿蒙开发实战】HarmonyOS 跨设备分享教程:隔空传送与碰一碰分享
华为·harmonyos
用户0934077735142 小时前
HarmonyOS WPS Open SDK 二开周回顾:从注册到关窗回传怎么串
typescript·harmonyos
程序员黑豆3 小时前
鸿蒙应用开发实战:轻松实现列表上拉加载更多
前端·华为·harmonyos
独隅4 小时前
DevEco Code Plan+Build 双 Agent 协同开发实效解析
ide·华为
fiona20264 小时前
HarmonyOS应用《玄象》开发实战:LunarCalendar.ets 农历计算核心:朔望月 + 节气 + 闰月推算
harmonyos·鸿蒙
yaoyaoxingzhe4 小时前
HarmonyOS应用开发实战:猫猫大作战-`$r` 与 `$rawfile` 的区别、资源目录结构、多分辨率适配
harmonyos·鸿蒙
youtootech16 小时前
HarmonyOS 实战教程(八):个人中心与华为云服务集成 —— 以「柚兔自测量表」为例
华为·华为云·harmonyos
红烧大青虫17 小时前
HarmonyOS应用《玄象》开发实战:掷钱动画:animateTo + 缓动曲线的物理感模拟
harmonyos·鸿蒙