应采用不可变结构、编译期类型约束与声明式元数据设计:所有属性描述符为只读对象,流式API返回新实例;类型沿链收敛,非法组合触发编译错误;运行时仅声明意图,校验/转换延迟绑定;错误结构化且可追溯。

要总结一套兼顾高性能与高健壮性的对象属性流式描述符生产规范,核心在于:用不可变结构承载可组合逻辑,以编译期约束替代运行时校验,同时严格隔离副作用。
属性描述符必须基于不可变数据结构
所有描述符(如 name、type、validator、transformer)须封装为只读对象或值类。禁止在构建后修改字段,避免因引用共享导致状态污染。
- 推荐使用 Object.freeze() 或 TypeScript 的 readonly 修饰符约束构造结果
- 流式 API(如 .required().min(1).max(10))每次调用应返回新描述符,而非就地修改
- 底层可复用轻量级元数据对象(如 { key: 'age', type: 'number', constraints: [...] }),但对外暴露只读视图
流式链路需支持静态类型推导与编译期验证
类型系统应能沿链式调用持续收敛类型信息,使最终生成的描述符具备精确的 TypeScript 类型,并在非法组合(如对字符串调用 .step(0.5))时触发编译错误。
- 每个中间方法(如 .integer()、.email())应返回泛型受限的描述符类型,例如 Descriptor
- 使用条件类型 + 函数重载实现“上下文感知”提示,例如 .default() 在未设 type 时禁用,或自动推导默认值类型
- 避免依赖 any 或 as 断言破坏类型流;必要时用 const 断言固化字面量类型
运行时行为必须零冗余、可预测、易拦截
描述符本身不执行校验或转换,仅声明意图;实际行为由统一的解析器/执行器按需触发,确保性能可控、路径清晰、错误可追溯。
- 描述符中只存声明性元数据(如 min: 0, required: true),不嵌入闭包或 this 绑定函数
- 校验器(validate(value))、转换器(coerce(input))等行为延迟绑定,支持运行时替换或包装(如加日志、熔断、指标上报)
- 提供 describe() 方法输出标准化 JSON Schema 片段,便于跨语言复用或文档生成
健壮性靠分层防御与显式失败语义
不隐藏错误,不静默降级;每一环节明确“什么情况下失败”、“失败时返回什么”,并支持结构化错误分类与定位。
- 校验失败必须返回带 path、code(如 'TOO_SHORT')、expected 和 received 的错误对象,而非布尔或字符串
- 允许用户注册全局钩子(如 onValidationError),但默认不抛异常,由上层决定是中断、警告还是修复
- 对 null、undefined、NaN 等边界值的处理策略需在描述符创建时显式声明(如 .nullable(true)),而非依赖隐式规则


















