装饰者验证
一个由TypeScript装饰器驱动的验证和模型框架. 它让你:
- 在模型属性(如:@required,@min,@pattern)上用声明式装饰来定义验证规则.
- 以可插入的注册和算法构建、验证、序列化和散列模型.
- 通过审定人类别和公用事业登记处扩大审定.
- 可选地将验证暴露为自动化工作流程的MCP工具.
2025-11-26. 发布docs刷新. 见 工作文件/报告/报告 罚单摘要.
核心概念
@model():一个将普通类转变为可有效模型的类装饰.- 认证:用于定义属性验证规则的一套丰富的装饰(例如,
@required, (中文(简体) ),@email, (中文(简体) ),@minLength) (中文(简体) ). Model类:一个抽象的基础类,提供验证,序列化,散列,和比较方法.Validation类:用于管理验证器注册并创建自定义验证逻辑的静态类.- 构建者和注册者: 用于控制模型构造、序列化和散列的可插件系统.
现有文件 这里
最小大小: 14.5 KB kb gziped
装饰者验证 - 详细描述
装饰者验证是一个TypeScript库,以两个互补的支柱为中心:
- 通过装饰器进行声明验证
- 一些丰富的地产装饰者,如:@required,@min,@max,@minLength,@maxLength,@pattern,@email,@url,@type,@equers,@greaterThanOrEqual,@lessThan,@lessThanOrEqual,@step,@list,@diff,@date,@password,以及aync ()旗下帮助者.
- 每个装饰者使用反射-元数据以及共同的验证元数据密钥惯例来写出强烈类型的元数据,因此验证者日后可以一致地解释规则.
- 装饰器在src/validation/decorers.ts中被定义,并辅以执行实际验证逻辑的src/validation/Validers/*中混凝土验证器类.
- 适合审定、建造、散列和系列化的模型系统
- 模型是用@model () (src/model/decorator.ts)来标记的普通类. 装饰器取代了构造器,将模型原型公用事业捆绑起来,运行一个全球构造器(如果注册),并给反射元数据作标记以识别.
- 额外的类级装饰器配置算法 :
- @hashedBy (algorithm,. args) 定义模型散列执行.
- @serializedBy( 序列器, ...args) 定义序列化策略 .
- @description(text)将人可读文档附加到一个类,属性,或方法.
- 示范类(src/model/Model.ts)规定:
- 用于按名称登记和检索模型构造器的模型登记管理器,能够重建/消除流动.
- 验证集成(model/validation.ts),运行已注册验证器与装饰器所收集的元数据相对抗.
- 利用方法和元数据帮助确定模型、获取元数据、比较实例并协调散列/序列化战略.
核心运行时架构
- 验证命名空间(弧/验证/Validation.ts):
- 管理一个可插件的 IValidator Registry, 这样可以注册、 迁移和询问自定义验证器执行 .
- 曝光辅助工具: 校验. key( ) 用于反射- metata keying, 校验. key( ) 用于列出可用的校验工具密钥, 注册(.)并获得(.) 用于管理校验工具, 装饰工具注册, 将元数据密钥与其装饰工具链接, 以便动态使用 .
- 校正器类(弧/验证/校正器/*):
- BaseValidator.ts定义了常见的行为;具体验证器(需要的Validator,MinValidator,PattleValidator等)执行验证和消息/打字逻辑.
- 校验器 Registry.ts 存储由校验Keys常数键入的校验器实例 .
- 常数.ts定义了DEFAULT ERROR MESSAGES,DEFAULT PATERNS,以及验证键(如REQUIRED,MIN,MAX.).
- 装饰者.ts包含可直接注册标准验证器的装饰糖,并使用装饰/参考设施构建元数据.
- 公用事业(电弧/功率/*):
- 字符串、日期、类型、序列化、散列、登记、装饰、装饰辅助器,以及用于穿行巢穴属性和应用元数据的路径Proxy.
图书馆的意向
- 提供连贯的,装饰者-第一开发者的经验,以强制执行对模型类的验证限制.
- 确保验证、模型生命周期(构建/序列化/hash)和元数据一致并通过登记册加以推广.
- 允许高级组成(海关验证员、替代登记册)并纳入自动化流程(MCP工具).
设计原则
- 声明超越必要:限制存在于它们验证的属性旁边.
- 广泛性:注册和助手工厂允许互换执行而无需改变消费者代码.
- 类型安全:元数据与装饰器被打入;验证器对被支持的类型进行广告;公用功能在实用之处使用狭义类型.
- 关注事项的分离: 装饰者表达意向; 验证者班级实施行为; 模型提供生命周期公用事业.
如何使用
本指南举例说明如何利用《公约》的主要特点 @decaf-ts/decorator-validation 图书馆.
创建模式
这个 @model() 装饰器是创建可验证模型的切入点.
import { model, Model } from '@decaf-ts/decorator-validation';
@model()
class User extends Model {
// ...
}
认证
库为定义属性的验证规则提供了一套丰富的装饰.
import { model, Model, required, email, minLength } from '@decaf-ts/decorator-validation';
@model()
class User extends Model {
@required()
name!: string;
@required()
@email()
email!: string;
@minLength(8)
password!: string;
}
验证一个模型
您可以使用 hasErrors() 方法.
const user = new User();
const errors = user.hasErrors();
if (errors) {
console.log('Validation errors:', errors);
}
忽略属性
您可以在验证过程中忽略属性, 将属性名称传递给 hasErrors()。 。 。 .
const user = new User();
// Ignore the 'password' property during validation
const errors = user.hasErrors('password');
串行和上行
这个 Model 类提供了序列化和散列实例的方法.
const user = new User({ name: 'John Doe', email: '[email protected]' });
const serializedUser = user.serialize();
const userHash = user.hash();
模型建筑
该图书馆为构建模型实例提供了一个灵活的系统.
import { Model } from '@decaf-ts/decorator-validation';
// Create a new instance
const user1 = new User({ name: 'Jane Doe' });
// Create an instance from a plain object
const user2 = Model.build({
[Model.ANCHOR]: 'User',
name: 'John Smith',
email: '[email protected]'
});
自定义验证器
您可以通过扩展 Validator 并登记在 Validation 课.
import { Validator, Validation, metadata } from '@decaf-ts/decorator-validation';
// 1. Create a custom validator
class MyCustomValidator extends Validator {
constructor() {
super('my-custom-validator', 'Invalid value');
}
validate(value: any): boolean {
// Custom validation logic
return value === 'valid';
}
}
// 2. Register the validator
Validation.register(new MyCustomValidator());
// 3. Create a decorator for the validator
function myCustom() {
return metadata(Validation.key('my-custom-validator'), {});
}
// 4. Use the decorator
@model()
class MyModel extends Model {
@myCustom()
myProp: string;
}
日期操作
图书馆包括: DateBuilder 用于创建和操纵日期.
import { DateBuilder } from '@decaf-ts/decorator-validation';
const date = new DateBuilder().addDays(5).build();
相关
社会
语文
获得帮助
如果您有错误报告, 请回答问题或建议 创建一个新问题。 。 。 .
捐款
我感谢对这一项目作出的任何贡献。 请阅读 这个 要开始.
支助
第一种最简单的方法就是支持它 捐款. 甚至在文档中找到打字很重要.
财政支持总是受到欢迎,帮助我和该项目保持生命和健康.
所以,如果你可以, 如果这个项目以任何方式。 要么通过学习 要么只是帮助你 节省宝贵的时间, 请考虑捐赠.
许可证
这个项目将在 Mozilla 公共许可证2.0。 。 。 .
由开发者为开发者...