Computed-Types 开源项目教程

ComputedTypes是一个开源项目,通过高级类型运算符增强TypeScript的类型系统,支持自定义扩展、限制、映射等操作,提升代码的灵活性和一致性,特别适合库/框架开发和数据驱动应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Computed-Types 开源项目教程

computed-types 🦩 Joi like validations for TypeScript 项目地址: https://gitcode.com/gh_mirrors/co/computed-types

1. 项目介绍

Computed-Types 是一个用于 TypeScript 的运行时验证库,旨在通过函数接口实现数据验证和转换。它能够自动生成准确的 TypeScript 接口,并在编译时检测错误。Computed-Types 的设计目标是减少代码重复,提供易于阅读的验证逻辑,并支持异步和同步验证。

主要特点

  • 易于阅读:使用 TypeScript 的运行时类型(如 string, array, unknown 等)。
  • 减少重复:通过现有函数快速创建新的验证器。
  • TypeScript 验证:在编译时检测错误。
  • 函数组合:链式调用多个验证器以生成新类型。
  • 数据转换:在验证的同时进行数据格式化。
  • 异步支持:自动检测并支持异步验证。
  • 零依赖:轻量且紧凑的库。
  • 纯 JavaScript:即使在没有 TypeScript 的环境中也能工作。

2. 项目快速启动

安装

Node.js
npm install computed-types
Deno
import { Schema, Type, string, number, array } from 'https://denoporter.sirjosh.workers.dev/v1/deno.land/x/computed_types/src/index.ts';

使用示例

以下是一个简单的使用示例,展示了如何定义一个用户验证模式并进行验证。

import { Schema, Type, string, number, array } from 'computed-types';

const UserSchema = Schema({
  name: string.trim().normalize().between(3, 40).optional(),
  username: /^[a-z0-9]{3,10}$/,
  status: Schema.either('active' as const, 'suspended' as const),
  items: array.of({
    id: string,
    amount: number.gte(1).integer(),
  }).min(1),
});

type User = Type<typeof UserSchema>;

const validator = UserSchema.destruct();

const [err, user] = validator({
  username: 'john1',
  status: 'active',
  items: [
    { id: 'item-1', amount: 20 },
  ],
});

if (err) {
  console.error(err);
} else {
  console.log(user);
}

3. 应用案例和最佳实践

自定义类型验证

Computed-Types 允许你创建自定义的验证器。例如,你可以创建一个验证电子邮件地址的验证器:

import * as EmailValidator from 'email-validator';

function Email(input: unknown): string {
  if (!EmailValidator.validate(String(input))) {
    throw new TypeError(`Invalid email address: "${input}"`);
  }
  return input;
}

const UserSchema = Schema({
  email: Email,
});

const validator = Schema(UserSchema);

异步验证

Computed-Types 支持异步验证。例如,你可以创建一个验证用户名的异步验证器:

import fetch from 'node-fetch';

async function AvailableUsername(input: string): Promise<string> {
  const res = await fetch(`/check-username?username=${encodeURIComponent(input)}`);
  if (!res.ok) {
    throw new TypeError(`Username "${input}" is already taken`);
  }
  return input;
}

const UserSchema = Schema({
  username: AvailableUsername,
});

const validator = Schema(UserSchema);

const user = await validator({ username: 'test' });

4. 典型生态项目

Joi

Joi 是一个流行的 JavaScript 对象模式描述语言和验证器。虽然 Joi 主要用于 JavaScript,但 Computed-Types 提供了类似 Joi 的验证功能,并且与 TypeScript 集成得更好。

Zod

Zod 是另一个 TypeScript 优先的验证库,提供了类似的功能。Computed-Types 和 Zod 都可以用于运行时验证和类型生成,但 Computed-Types 更注重函数组合和数据转换。

Yup

Yup 是一个 JavaScript 对象模式验证器,类似于 Joi。Computed-Types 提供了更强大的 TypeScript 集成和更灵活的验证逻辑。

通过这些生态项目,你可以根据具体需求选择最适合的验证库,或者结合使用以实现更复杂的验证逻辑。

computed-types 🦩 Joi like validations for TypeScript 项目地址: https://gitcode.com/gh_mirrors/co/computed-types

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芮伦硕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值