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 集成和更灵活的验证逻辑。
通过这些生态项目,你可以根据具体需求选择最适合的验证库,或者结合使用以实现更复杂的验证逻辑。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考