@ apexo/ 类型
花了几个小时写验证代码, 只是为了意识到你在每一个功能中都做了同样的事情? 或者你让AI为你生产 现在你的捆绑被重复的锅炉板胀了?
@ apexo/ 类型 是一个小型的库 , 用来检查您的类型 。 你为什么需要它? 因为JavaScript的类型检查很奇怪:
typeof null说这是个"object"(但事实并非如此)typeof []说这是个"object"(阵列需要不同的检查)typeof NaN说这是个"number"(虽然NaN的意思是"不是数字")- 无法检查对象中的空值或循环
你可以自己写所有的支票:
function processUser(data) {
if (data === null || data === undefined) {
throw new Error('Data is required');
}
if (typeof data !== 'object' || Array.isArray(data)) {
throw new Error('Data must be an object');
}
if (typeof data.name !== 'string' || data.name.trim() === '') {
throw new Error('Name must be a non-empty string');
}
if (typeof data.age !== 'number' || isNaN(data.age) || data.age < 0) {
throw new Error('Age must be a positive number');
}
// Finally, your actual logic...
}
或者你该用 @ apexo/ 类型 然后用三行来完成:
import { isObject, isNotEmpty, isPositive } from '@apexo/type';
function processUser(data) {
if (!isObject(data)) throw new Error('Data must be an object');
if (!isNotEmpty(data.name)) throw new Error('Name is required');
if (!isPositive(data.age)) throw new Error('Age must be positive');
// Your actual logic, front and center
}
我为什么要这么做?
Java 脚本 typeof 在许多现实世界的情景中,操作员不足:
typeof null === 'object'(没有! )typeof [] === 'object'(阵列需要特殊处理)- 没有办法检查
NaN,空值,或验证复杂的结构
@ apexo/ 类型 通过提供:
- 运行时间安全: 在处理前验证APIs、用户输入或任何不可信来源的数据
- 类型脚本集成:在代码中自动输入守护器的狭义类型,给您完整的IntelliSense支持
- 可读代码: 替换动词检查, 如
if (value !== null && value !== undefined && typeof value === 'string' && value.trim() !== '')与if (isNotEmpty(value)) - 边际案件处理: 正确处理棘手的 JavaScript 边缘大小写(
null, (中文(简体) ),undefined, (中文(简体) ),NaN, (中文(简体) ),Symbol, (中文(简体) ),BigInt,循环参考)
它有多小吗?
- ~12KB 变焦 (整个图书馆)
- 树能震动:只有捆绑你使用的东西。 导入
isString您的捆绑将不包括日期验证器或循环参考检测 - 零依赖关系: 外部软件包中无 bloat
- 无副作用: 标记为
"sideEffects": false以便摇动最优的树木
我怎么安装?
npm install @apexo/type
或与您的首选软件包管理器 :
pnpm add @apexo/type
yarn add @apexo/type
我该怎么用?
基本类型警卫
类型守护符返回布尔并自动缩小类型Script类型 :
import { isString, isNumber, isArray } from '@apexo/type';
function process(input: unknown) {
if (isString(input)) {
// TypeScript knows input is string here
console.log(input.toUpperCase());
}
if (isArray(input)) {
// TypeScript knows input is any[] here
console.log(input.length);
}
}
验证值
除类型检查外, 验证特定属性 :
import { isPositive, isEven, isFutureDate, isEmpty } from '@apexo/type';
isPositive(10); // true
isEven(7); // false
isEmpty(' '); // true
isFutureDate(new Date('2050-01-01')); // true
高级公用事业
import { whatTypeOf, hasCircularReference } from '@apexo/type';
whatTypeOf(null); // "null" (not "object"!)
whatTypeOf([]); // "array"
whatTypeOf(new Date()); // "date"
const obj: any = {};
obj.self = obj;
hasCircularReference(obj); // { hasCircular: true, path: "root.self -> root" }
正在装入库
ES模块(建议)
import { isString, isObject } from '@apexo/type';
常见JS
const { isString, isObject } = require('@apexo/type');
类型脚本
库以TypeScript书写并包含出框的完整类型定义.
是否有类型脚本定义 ?
没错! 图书馆是 类型脚本第一 包括完整的类型定义。 所有类型守护人员都使用TypeScript类型上游语法(value is Type),提供自动类型缩小:
function example(input: unknown) {
if (isString(input)) {
// input is automatically typed as 'string'
input.toLowerCase(); // ✅ TypeScript knows this is safe
}
}
我能用到哪里来?
JavaScript 运行的地方 :
- ✅ 节点.js (v14+) (中文(简体) )
- ✅ 浏览器 (现代浏览器, IE11+ 有多填充)
- ✅ 德诺
- ✅ 阿宝
- ✅ 边缘函数 (Vercel, Cloudflare工人等)
- ✅ 原生反应
库有零依赖性,只使用标准的JavaScript特性,使其普遍兼容.
API 参考
初级
isString(value)- 检查值是否为字符串isNumber(value)- 检查值是否是一个数字(而不是NaN)isNumberStr(value)- 检查值是数字还是数字字符串isBoolean(value)- 检查值是否为布尔值isNil(value)- 检查值是否为null或者说undefinedisNull(value)- 检查值是否为nullisUndefined(value)- 检查值是否为undefinedisBigInt(value)- 检查值是否为 BigIntisSymbol(value)- 检查值是否为符号isPrimitive(value)- 检查值是否为原始类型
对象结构( R)
isObject(value)- 检查值是否为非无效对象(不包括数组)isPlainObject(value)- 检查值是否为普通对象({}或者说new Object()(中文(简体) )isArray(value)- 检查值是否为数组isArrayLike(value)- 检查值是否类似数组(有长度属性)isFunction(value)- 检查值是否为函数isClass(value)- 检查值是否为类构建器isIterable(value)- 检查值是否可以持续isAsyncIterable(value)- 检查值是否可同步isGeneratorFunction(value)- 检查值是否为生成函数isWindow(value)- 检查是否为窗口对象
高级类型
isPromise(value)- 检查值是否为承诺isMap(value)- 检查值是否是地图isSet(value)- 检查值是否为集isWeakMap(value)- 检查值是否为弱映射isWeakSet(value)- 检查值是否为弱点集isRegExp(value)- 检查值是否为RegExpisDate(value)- 检查值是否为日期对象isError(value)- 检查值是否为错误isTypeError(value)- 检查值是否为类型错误isReferenceError(value)- 检查值是否为引用错误isSyntaxError(value)- 检查值是否为语法错误isRangeError(value)- 检查值是否为范围错误isURIError(value)- 检查值是否为 URIERORisEvalError(value)- 检查值是否为 EvalErrorisAggregateError(value)- 检查值是否为聚合错误isBuffer(value)- 检查值是缓冲(Node.js)还是ArrayBuffer/ViewisJson(value)- 检查值是否为有效的 JSON 字符串
空检查
isEmpty(value)- 检查值是否为空(无效、未定义、空字符串/阵列/对象)isNotEmpty(value)- 逆向的isEmptyisEmptyStr(value)- 检查值是否为空字符串(或仅为白空)isEmptyArr(value)- 检查值是否为空数组isEmptyObj(value)- 检查值是否为空对象
数量 校验器
isFiniteNumber(value)- 检查值是否为有限数字isInteger(value)- 检查值是否为整数isFloat(value)- 检查值是否为浮点isSafeInteger(value)- 检查值是否是一个安全的整数isPositive(value)- 检查值是否 > 0isNegative(value)- 检查值是否 < 0isZero(value)- 检查值是否为 0isEven(value)- 检查值是否均匀isOdd(value)- 检查值是否为奇数isPrime(value)- 检查值是否为质数isInRange(value, min, max)- 检查值是否在 [min, 最大]isBetween(value, min, max)- 检查值是否严格在(最小值,最大值)之间
日期验证器
isValidDate(value)- 检查值是否为有效日期( 非无效日期)isStrictDate(value)- 别提了isValidDateisFutureDate(date)- 检查日期是否在未来isPastDate(date)- 检查日期是否过去isToday(date)- 检查日期是不是今天isSameDay(a, b)- 检查两个日期是否在同一天isLeapYear(year)- 检查年份是否为一跃而起isISODateString(value)- 检查值是否为 ISO 8601 日期字符串isValidISODateOnly(value)- 检查值是否为有效的 YYY- MM- DD 字符串isValidTimeString(value)- 检查值是否是一个有效的时间字符串( HH: mm)isDateTimeString(value)- 检查值是否是一个有效的日期时间字符串isTimestamp(value)- 检查值是否是一个有效的时间戳isDateLike(value)- 检查是否可以转换为有效的日期isForwardTime(date, offset?)- 检查日期是否在日期之后+抵消isBackwardTime(date, offset?)- 检查日期是否在现在之前 - 页:1
公用事业
whatTypeOf(value)- 返回一个特定的类型字符串(例如“阵列”、“日期”、“无”)hasCircularReference(obj)- 探测物体/阵列中的循环参考
建筑
图书馆的组织效率最高:
src/
├── guards/ # Type guards (value is Type)
│ ├── primitives.ts # Basic types
│ ├── objects.ts # Object structures
│ ├── advanced.ts # Promises, Maps, Sets
│ ├── errors.ts # Error types
│ └── empty.ts # Empty checks
├── validators/ # Value validators (boolean)
│ ├── number.ts # Numeric validations
│ └── date.ts # Date validations
└── utils/ # Helper utilities
├── type-of.ts # Enhanced typeof
└── circular-ref.ts # Circular reference detection
这种结构可以让捆绑者在不使用时去掉所有类别的检查.
许可证
仓库
https://github.com/bytetologic/apexo.js/tree/main/packages/type 页面存档备份,存于互联网档案馆