Skip to content

类型检查工具库

API 文档

getObjectType

获取值的准确类型字符串表示。

typescript
import { getObjectType } from '@mgcloud/lib-utils';

getObjectType({});           // '[object Object]'
getObjectType([]);          // '[object Array]'
getObjectType('string');    // '[object String]'
getObjectType(new Date());  // '[object Date]'

基础类型检查

isNil

检查值是否为 nullundefined

typescript
import { isNil } from '@mgcloud/lib-utils';

isNil(null);       // true
isNil(undefined);  // true
isNil(0);         // false
isNil('');        // false

isUndefined

检查值是否为 undefined

typescript
import { isUndefined } from '@mgcloud/lib-utils';

isUndefined(undefined);  // true
isUndefined(null);      // false
isUndefined('');        // false

isString

检查值是否为字符串。

typescript
import { isString } from '@mgcloud/lib-utils';

isString('hello');     // true
isString(new String('hello')); // true
isString(123);        // false

isNumber

检查值是否为数字(不包括 NaN)。

typescript
import { isNumber } from '@mgcloud/lib-utils';

isNumber(123);        // true
isNumber(1.23);      // true
isNumber(NaN);       // false
isNumber('123');     // false

isBoolean

检查值是否为布尔类型。

typescript
import { isBoolean } from '@mgcloud/lib-utils';

isBoolean(true);      // true
isBoolean(false);     // true
isBoolean(1);         // false
isBoolean('true');    // false

复杂类型检查

isObject

检查值是否为普通对象(不包括数组、Map、Set等特殊对象)。

typescript
import { isObject } from '@mgcloud/lib-utils';

isObject({});                // true
isObject({ name: 'test' }); // true
isObject([]);               // false
isObject(new Map());        // false
isObject(new Date());       // false

isArray

检查值是否为数组。

typescript
import { isArray } from '@mgcloud/lib-utils';

isArray([]);               // true
isArray([1, 2, 3]);       // true
isArray(new Array(3));    // true
isArray({});              // false

isFunction

检查值是否为函数。

typescript
import { isFunction } from '@mgcloud/lib-utils';

isFunction(() => {});     // true
isFunction(function() {}); // true
isFunction(class {});     // true
isFunction({});           // false

isPromise

检查值是否为 Promise 对象。

typescript
import { isPromise } from '@mgcloud/lib-utils';

isPromise(Promise.resolve());      // true
isPromise(new Promise(() => {})); // true
isPromise({ then: () => {} });   // false

isDate

检查值是否为有效的 Date 对象。

typescript
import { isDate } from '@mgcloud/lib-utils';

isDate(new Date());           // true
isDate(new Date('invalid')); // false
isDate('2024-01-01');       // false

isRegExp

检查值是否为正则表达式对象。

typescript
import { isRegExp } from '@mgcloud/lib-utils';

isRegExp(/test/);            // true
isRegExp(new RegExp('test')); // true
isRegExp('/test/');          // false

isMap

检查值是否为 Map 对象。

typescript
import { isMap } from '@mgcloud/lib-utils';

isMap(new Map());    // true
isMap(new Set());    // false
isMap({});          // false

isSet

检查值是否为 Set 对象。

typescript
import { isSet } from '@mgcloud/lib-utils';

isSet(new Set());    // true
isSet(new Map());    // false
isSet([]);          // false

类型断言

assertType

断言值为指定类型,如果类型不匹配则抛出错误。

typescript
import { assertType, isString } from '@mgcloud/lib-utils';

// 不会抛出错误
assertType('hello', isString);

// 会抛出 TypeError: Value is not of expected type: 123
assertType(123, isString);

// 自定义错误消息
assertType(123, isString, '值必须是字符串类型');

类型安全

所有函数都包含了 TypeScript 类型谓词(type predicates),可以在类型收窄时提供类型推断支持:

typescript
const value: unknown = 'hello';

if (isString(value)) {
    // 在这个作用域内,TypeScript 知道 value 是 string 类型
    console.log(value.toUpperCase());
}

注意事项

  1. isNumber 函数会将 NaN 视为非数字类型
  2. isObject 函数不会将数组、Map、Set、Date 或 RegExp 对象视为普通对象
  3. isPromise 检查不仅验证对象是否有 thencatch 方法,还会检查其内部 [[Class]] 标记
  4. isDate 会验证日期对象是否有效,无效的日期对象将返回 false

导出方法

typescript
import {
  getObjectType,
  isNil,
  isUndefined,
  isString,
  isNumber,
  isObject,
  isBoolean,
  isArray,
  isFunction,
  isPromise,
  isDate,
  isRegExp,
  isMap,
  isSet,
  assertType,
} from '@mgcloud/lib-utils'

Source

Source