1.0.5 • Published 3 months ago

hi-datatype-operation v1.0.5

Weekly downloads
-
License
ISC
Repository
github
Last release
3 months ago

Hi Datatype Operation npm version

CI Build Test Coverage Bundle Size

下一代 JavaScript/TypeScript 运行时数据类型检测工具,提供原子级类型守卫、复杂结构验证与智能类型推断,让数据验证从未如此优雅。

# 安装
npm install hi-datatype-operation
# yarn
yarn add hi-datatype-operation
# pnpm
pnpm add hi-datatype-operation

✨ 核心特性

  • 🔍 20+ 基础类型检测 - 包含 NaN/undefined 安全校验

  • 🧩 复杂结构验证 - 支持对象/数组/元组/联合类型

  • ⚡ 3KB 极致轻量 - 零依赖,Tree-Shaking 友好

  • 🔗 链式操作 API - 支持流畅的类型组合操作

  • 🛡️ 安全增强 - XSS 防御与原型污染防护

  • 🧠 智能类型推断 - 完美同步 TypeScript 类型系统

🚀 快速入门

基础类型检测

import { isString, isNumber } from 'hi-datatype-operation';

console.log(isString('hello')); // true
console.log(isNumber(42));      // true
console.log(isNumber(NaN));     // false

对象结构验证

import { matchStructure } from 'hi-datatype-operation';

const userValidator = {
  name: isString,
  age: (v: unknown) => isNumber(v) && v > 0,
  email: (v: unknown) => isString(v) && v.includes('@')
};

const validUser = {
  name: "Alice",
  age: 28,
  email: "alice@example.com"
};

console.log(matchStructure(validUser, userValidator)); // true

📚 使用示例

递归类型验证

import { createRecursiveValidator } from 'hi-datatype-operation';

type TreeNode = {
  value: number;
  children?: TreeNode[];
};

const isTreeNode = createRecursiveValidator<TreeNode>({
  value: isNumber,
  children: (v) => 
    isOptional(isArray(v => isTreeNode(v)))
});

const validTree = {
  value: 1,
  children: [
    { value: 2 },
    { value: 3, children: [{ value: 4 }] }
  ]
};

console.log(isTreeNode(validTree)); // true

元组类型验证

import { isTuple } from 'hi-datatype-operation';

const is3DPoint = isTuple(
  [isNumber, isNumber, isNumber]
);

console.log(is3DPoint([1, 2, 3])); // true
console.log(is3DPoint([1, "2"]));  // false

链式操作 API

import { detect } from 'hi-datatype-operation';

const riskyInput: unknown = "<script>alert(1)</script>";

const result = detect(riskyInput)
  .filter(v => isString(v))
  .transform(v => v.replace(/<[^>]*>?/g, '')) // XSS 清洗
  .validate(v => v.length > 0);

console.log(result.value); // "alert(1)"

数据清洗管道

import { createPipeline } from 'hi-datatype-operation';

const sanitizeUserInput = createPipeline()
  .filter(isString)
  .transform(s => s.trim())
  .validate(s => s.length <= 100);

const cleanData = sanitizeUserInput.process("  Too long...".repeat(20));
console.log(cleanData.success); // false
console.log(cleanData.error);   // "Validation failed"

📖 API 文档

基础类型检测

方法名参数类型返回类型描述
isStringunknownboolean检查值是否为字符串
isNumberunknownboolean检查值是否为数字
isBooleanunknownboolean检查值是否为布尔值
isBigIntunknownboolean检查值是否为 BigInt
isSymbolunknownboolean检查值是否为 Symbol
isUndefinedunknownboolean检查值是否为 undefined
isNullunknownboolean检查值是否为 null
isObjectunknownboolean检查值是否为对象(不包括 null)
isArrayunknownboolean检查值是否为数组
isFunctionunknownboolean检查值是否为函数
isDateunknownboolean检查值是否为 Date 对象
isRegExpunknownboolean检查值是否为正则表达式
isSetunknownboolean检查值是否为 Set 对象
isMapunknownboolean检查值是否为 Map 对象
isWeakSetunknownboolean检查值是否为 WeakSet 对象
isWeakMapunknownboolean检查值是否为 WeakMap 对象
isPromiseunknownboolean检查值是否为 Promise 对象
isGeneratorFunctionunknownboolean检查值是否为 GeneratorFunction 对象
isAsyncFunctionunknownboolean检查值是否为 AsyncFunction 对象
isBufferunknownboolean检查值是否为 Buffer 对象
isTypedArrayunknownboolean检查值是否为 TypedArray 对象
isIterableunknownboolean检查值是否为可迭代对象
isFiniteunknownboolean检查值是否为有限数
isIntegerunknownboolean检查值是否为整数
isNaNunknownboolean检查值是否为 NaN
isSafeIntegerunknownboolean检查值是否为安全整数
isPrimitiveunknownboolean检查值是否为原始类型(包括 null、undefined、boolean、number、string、symbol)
isObjectLikeunknownboolean检查值是否为类对象(不包括 null)
isPlainObjectunknownboolean检查值是否为普通对象(不包括 null、数组、函数等)
isEmptyunknownboolean检查值是否为空(包括 null、undefined、空字符串、空数组、空对象等)
isNotEmptyunknownboolean检查值是否不为空(不包括 null、undefined、空字符串、空数组、空对象等)
isTruthyunknownboolean检查值是否为真值(不包括 null、undefined、0、NaN、空字符串、空数组、空对象等)
isFalsyunknownboolean检查值是否为假值(包括 null、undefined、0、NaN、空字符串、空数组、空对象等)
isSameTypeunknown, unknownboolean检查两个值是否为相同类型
isSameValueunknown, unknownboolean检查两个值是否具有相同的值(使用 Object.is)
isSameValueZerounknown, unknownboolean检查两个值是否具有相同的值(使用 == 运算符)
isSameValueStrictunknown, unknownboolean检查两个值是否具有相同的值(使用 === 运算符)
isSameValueLooseunknown, unknownboolean检查两个值是否具有相同的值(使用 == 运算符,但允许类型转换)
isSameValueStrictLooseunknown, unknownboolean检查两个值是否具有相同的值(使用 === 运算符,但允许类型转换)
isSameValueZeroLooseunknown, unknownboolean检查两个值是否具有相同的值(使用 == 运算符,但允许类型转换)

复杂结构验证

interface StructureValidator {
  /**
   * 对象结构验证
   * @param obj - 待验证对象
   * @param blueprint - 结构蓝图
   * @param options.strict - 是否严格模式(禁止多余属性)
   */
  matchStructure<T>(
    obj: unknown,
    blueprint: StructureBlueprint<T>,
    options?: { strict?: boolean }
  ): obj is T;
}

链式操作 API

class TypeOperator {
  /**
   * 值转换管道
   * @param transformer - 转换函数
   * @example
   * detect("123").transform(Number) // 返回数字类型守卫
   */
  transform<T>(transformer: (v: CurrentType) => T): TypeOperator<T>;
}

License

MIT © 2024 杜朝辉