前言
类型检查在动态类型语言中非常重要,了解变量的实际类型有助于避免运行时错误。@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']);
}
五、注意事项
- null陷阱:typeof null === 'object',TypeUtil正确识别为null
- NaN判断:typeof NaN === 'number',TypeUtil可区分
- 数组判断:typeof \[\] === 'object',TypeUtil正确识别为array
- 初始化依赖 :使用前需确保
AppUtil.init()已调用 - 包装类型: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工具库,更多功能请参考官方文档与后续系列文章。